如何使用WinForms设置控件的Z顺序

6tr1vspr  于 2022-11-17  发布在  其他
关注(0)|答案(4)|浏览(161)

我正在编写一个自定义的TextBox,它在获得焦点时会更改其边框样式。
由于添加边框会导致控件与相邻控件重叠,因此我暂时将文本框置于对话框的前面(使用textBox.BringToFront())。
但是,一旦编辑完成并且焦点丢失,我希望将控件发送回其在Z顺序中的原始位置。
这是可能的吗(最好是以简单的方式!)

qnyhuwrf

qnyhuwrf1#

呼叫父代Controls集合的GetChildIndexSetChildIndex方法。

ulydmbyx

ulydmbyx2#

没有VB中的Z顺序,但您可以使用GetChildIndexSetChildIndex方法手动获取和设置它们的索引。
Here这里有一个使用它的例子。你可能需要记录每个控件的索引,这样你就可以在它完成的时候把它设置回它。
类似这样的东西可能就是你所追求的:

// 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);
nnvyjq4y

nnvyjq4y3#

与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);
        }
    }
velaa5lx

velaa5lx4#

In C升调

控件.设置值(面板. ZIndex属性,0);

控件是您的控件。0是ZIndex的索引。0是默认值。

相关问题