我有一个场景,我想专注于容器内的第一个控件。
为此,我写了一段代码:
Control FirstFocusableControl;
static public Control FocusFirstControl(Control ctrl)
{
FirstFocusableControl = null;
GetFirstControl(ctrl);
return FirstFocusableControl;
}
//Get first control from Containers control
static public void GetFirstControl(Control ctrl)
{
foreach (Control ctrlItem in ctrl.Controls)
{
//if (ctrlItem is Panel || ctrlItem is GroupBox)
if(ctrlItem.HasChildren )
{
GetFirstControl(ctrlItem);
}
//if control is not a containers,Tababble,enabled,visible to user and control length is more than zero size
else if (ctrlItem is Control && ctrlItem.TabStop && ctrlItem.Enabled && ctrlItem.Visible && ctrlItem.Size.Width > 0)
{
FirstFocusableControl = ctrlItem;
break;
}
}
}
但很少有情景如 包含面板的TableLayout面板,如果它包含一个面板,则为实习生 表格 - > TableLayoutPanel->面板 - >面板 - >控制失败。
我一直试着调试代码。 但我总是把注意力集中在下一个控制上 即。表格 - >文本框。 请让我知道实现这个问题的方法..
答案 0 :(得分:1)
你应该在GetFirstControl(ctrlItem)之后返回; 请尝试以下代码。
public bool GetFirstControl(Control ctrl)
{
foreach (Control ctrlItem in ctrl.Controls)
{
if (ctrlItem.HasChildren)
{
if(GetFirstControl(ctrlItem))
{
return true;
}
}
else if (ctrlItem is Control && ctrlItem.CanFocus && ctrlItem.TabStop && ctrlItem.Enabled && ctrlItem.Visible && ctrlItem.Size.Width > 0)
{
ctrlItem.Focus();
return true;
}
}
return false;
}