有没有办法使UserControl不可折叠?有没有办法使UserControl不可折叠?
编辑: 所以SetStyle(ControlStyles.Selectable, false)
是要走的路。但仍然有差异Control
。如果您继承Control
,则初始控件不会失去焦点。但是点击是从UserControl
和
ControlStyles.Selectable
派生的控制后应用焦点从最初的控制中删除。
有没有办法使UserControl不可折叠?有没有办法使UserControl不可折叠?
编辑: 所以SetStyle(ControlStyles.Selectable, false)
是要走的路。但仍然有差异Control
。如果您继承Control
,则初始控件不会失去焦点。但是点击是从UserControl
和
ControlStyles.Selectable
派生的控制后应用焦点从最初的控制中删除。
在你的构造InitializeComponent()
后,你需要调用SetStyle
并设置ControlStyles.Selectable
风格false
:
SetStyle(ControlStyles.Selectable, false);
如果CanFocus属性返回false,UserControl或任何Control将无法获得焦点。如果您查看反射器中的代码,它会基本检查3个属性,如果有任何属性为false,则它将不可对焦。
设置前两个为false,并且有一个有效的控制是非常矛盾的。如果有可能让您的控件在IsEnabled为false的情况下起作用,那么应该可以工作。
更容易设置ControlStyles.Selectable风格为false。 – 2009-04-24 13:14:26
是的,的SetStyle(ControlStyles.Selectable,假);只有在您从控件继承时才有效。
如果您从用户控件继承,它将不起作用。
为了解决这个问题,我在用户控件中添加了一个面板,并将面板停靠在“填充”上。 将控件的其余部分添加到面板而不是用户控件。有效!
通过将TabStop设置为false,您可以更接近想要的内容。例如,当它自己的窗体上方的对话框关闭时,这将阻止控件集中。
此外ControlStyles.Selectable也有ControlStyles.ContainerControl - 文档这个主题相当少(如果为真,控制是一个容器类控制),但如果孩子的控制得到,而不是集中控制的它在某种程度上影响本身。
编辑:
我刚才注意到另一个有趣的事实。在反射器中查看UserControl显示它强制在OnMouseDown中设置输入焦点。因此,在不调用base.OnMouseDown(e)的情况下重写OnMouseDown可以解决此问题,且不会产生副作用。
[EditorBrowsable(EditorBrowsableState.Advanced)]
protected override void OnMouseDown(MouseEventArgs e)
{
if (!this.FocusInside())
{
this.FocusInternal();
}
base.OnMouseDown(e);
}
当UserControl嵌入TextBox时它不起作用。文本框将捕捉焦点。 – volody 2010-09-22 18:08:46