我的Panel
有AutoScroll = true
。
其中Panel
是一系列TextBox
es。我应该注意TextBox
es不是直接在panel
,而是嵌套在几个级别(大约4-5)。
现在,只有当面板具有焦点时,我的鼠标滚轮才能自然滚动。我可以在Focus()
事件中使用mouseEnter
来确保面板具有焦点。
然而,我之前提到的TextBox
es很大程度上依赖于焦点。只有用户才能通过点击其他地方从TextBox
移除焦点。
TextBox
es是动态创建的,并且会产生非常混乱的代码以保留它们的数组,或任何类型的引用来检查它们是否具有焦点。更不用说可能会有很多。
如何将焦点放在Panel
上,但前提是TextBox
es没有集中注意力?
答案 0 :(得分:1)
您不需要保留动态创建的文本框数组,您可以使用以下命令获取数组:
bool anyTextBoxFocused = false;
foreach (Control x in this.Controls)
{
if (x is TextBox && x.Focused)
{
anyTextBoxFocused = true;
break;
}
}
if (!anyTextBoxFocused)
{
//give focus to your panel
}
修改强>
基于How to get ALL child controls of a Windows Forms form of a specific type (Button/Textbox)?,甚至可以使用以下方法获得嵌套控件:
public IEnumerable<Control> GetAll(Control control,Type type)
{
var controls = control.Controls.Cast<Control>();
return controls.SelectMany(ctrl => GetAll(ctrl,type))
.Concat(controls)
.Where(c => c.GetType() == type);
}
然后用它:
var c = GetAll(this,typeof(TextBox));