38

TextBoxフォーカスを取得すると境界線のスタイルが変わるという習慣を書いています。

境界線を追加すると、コントロールが隣接するコントロールとオーバーラップするため、一時的にテキストボックスをダイアログの前面に移動します(を使用textBox.BringToFront())。

ただし、編集が完了してフォーカスが失われたら、コントロールをZオーダーの元の位置に戻したいと思います。

これは可能ですか(できれば簡単な方法で!)

4

3 に答える 3

46

親のコレクションのGetChildIndexandメソッドを呼び出します。SetChildIndexControls

于 2010-07-09T14:03:08.527 に答える
27

VBのようにZオーダーはありませんが、GetChildIndexandSetChildIndexメソッドを使用して、手動でインデックスを取得および設定できます。

使い方の例を示しますただし、終了時に元に戻すことができるように、各コントロールインデックスの記録を保持する必要があります。

このようなものはおそらくあなたが求めているものです:

// 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);
于 2010-07-09T14:03:43.690 に答える
1

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);
        }
    }
于 2018-04-04T17:01:35.133 に答える