私はカスタムTextBox
を書いています。これはフォーカスを取得すると境界線のスタイルを変更します。
境界線を追加すると、コントロールが隣接する境界線と重なるため、テキストボックスを一時的にダイアログの前面に移動します(textBox.BringToFront()
を使用)。
ただし、編集が完了してフォーカスが失われたら、コントロールをZオーダーの元の位置に戻したいと思います。
これは可能ですか?(できれば簡単な方法で!)
親のGetChildIndex
コレクションの SetChildIndex
および Controls
メソッドを呼び出します。
VBにあったようなZオーダーはありませんが、 GetChildIndex
および SetChildIndex
メソッドを使用して、手動でインデックスを作成します。
ここ 使用方法の例があります。おそらく、各コントロールインデックスの記録を保持する必要があるので、終了したらそれを元に戻すことができます。
このようなものはおそらくあなたが望んでいるものです:
// Get the controls index
int zIndex = parentControl.Controls.GetChildIndex(textBox);
// Bring it to the front
textBox.BringToFront();
// Do something...
// Then send it back again
parentControl.Controls.SetChildIndex(textBox, zIndex);
FlowLayoutPanelと共に使用すると、コントロールが上下に移動します
/// <summary>
/// When used with the FlowLayoutPanel this will move a control up or down
/// </summary>
/// <param name="sender"></param>
/// <param name="UpDown"></param>
private void C_On_Move(object sender, int UpDown)
{
//If UpDown = 1 Move UP, If UpDown = 0 Move DOWN
Control c = (Control)sender;
// Get the controls index
int zIndex = _flowLayoutPanel1.Controls.GetChildIndex(c);
if (UpDown==1 && zIndex > 0)
{
// Move up one
_flowLayoutPanel1.Controls.SetChildIndex(c, zIndex - 1);
}
if (UpDown == 0 && zIndex < _flowLayoutPanel1.Controls.Count-1)
{
// Move down one
_flowLayoutPanel1.Controls.SetChildIndex(c, zIndex + 1);
}
}