如何使用WinForms设置Control的Z顺序

g t*_*g t 31 c# textbox focus z-order winforms

我正在写一个习惯TextBox,一旦获得焦点改变其边框风格.

由于添加边框会导致控件与相邻的控件重叠,因此我暂时将文本框置于对话框的前面(使用textBox.BringToFront()).

但是,一旦编辑完成并且焦点丢失,我想将控件发送回Z顺序中的原始位置.

这是可能的(最好以简单的方式!)

SLa*_*aks 40

调用父集合的GetChildIndexSetChildIndex方法Controls.

  • 伟大 - 带领BringToFront误入歧途()我找错了这些方法的地方:在控件的方法,而不是父控件的方法.谢谢. (4认同)
  • 没有例子 (2认同)

Iai*_*ard 26

VB中没有Z顺序,但您可以使用GetChildIndexSetChildIndex方法手动获取和设置索引.

这里有一个如何使用它的例子.您可能需要保留每个控件索引的记录,因此您可以在完成后将其设置回它.

这样的事情可能就是你所追求的:

// 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);
Run Code Online (Sandbox Code Playgroud)

  • 当您动态地使控件(in)可见时,一切都会发生变化.设置'textbox.Visible = true'并且它将具有索引0.它完全忽略文档大纲中的顺序.这花了我一点时间来图:) (6认同)