我正在使用c#的Windows应用程序。我创建了一个表单frmMain
,在用户登录时加载。用户有4个选项,如客户创建,供应商创建,员工创建,用户创建
这很好用。
焦点出现问题。当用户加载Customer
用户控件并填写一些数据时,让我们假设用户位于第4个控件(Textbox
/ Combobox
或任何其他Windows窗体输入控件)的某个位置,并且突然他点击CreateUser
,然后CreateUser
控制加载,但重点仍然是Customer
用户控件中的第4个控件。
我想要的是将焦点设置在当前用户控件上,如果是新加载的设置焦点,则用户将其从其他位置保留在默认控件上。
请检查我正在使用的代码,
// this method gets called if the form was opened earlier
private void ShowOpenForm(ControlItem _item)
{
try
{
//Get item from menu
ControlItem _menuI = null;
foreach (ToolStripmenuI menuI in tsmenuWindow.DropDownItems)
{
_menuI = (ControlItem)menuI.Tag;
if (_menuI.Control.Name.ToLower() == _item.Control.Name.ToLower())
{
break;
}
_menuI = null;
}
if (_menuI != null)
{
WmenuI_ClearAllSelection();
for (int index = 0; index < PnlUserCtrl.Controls.Count; index++)
{
Control ctl = PnlUserCtrl.Controls[index];
if (ctl.Name.ToLower() == _menuI.Control.Name.ToLower())
{
ctl.Visible = true;
ctl.BringToFront();
break;
}
}
WmenuI_SetCurrentItemChecked(_menuI);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//User can navigate to opened items from menu as well
private void WindowMenuItem_Click(object sender, EventArgs e)
{
try
{
ControlItem _item = (ControlItem)((ToolStripMenuItem)sender).Tag;
WmenuI_ClearAllSelection();
for (int index = 0; index < PnlUserCtrl.Controls.Count; index++)
{
Control ctl = PnlUserCtrl.Controls[index];
if (ctl.Name.ToLower() == _item.Control.Name.ToLower())
{
ctl.Visible = true;
ctl.BringToFront();
if (ctl is BaseControl)
{
((BaseControl)ctl).SetFocus(); // This sets the focus to default textbox
}
break;
}
}
WmenuI_SetCurrentItemChecked(_item);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
但是这个集合关注的是默认文本框。不受用户移动到其他用户控制的控制。
答案 0 :(得分:0)
为了获得更好的答案,在您的问题中提供一些代码是一种很好的做法。
您可以使用SetFocus()
方法手动操作焦点。对于您的问题,我相信您可以拥有Control
类型的对象,然后您可以将其设置为您想要关注的默认控件。然后,您处理控件的所有GotFocus
方法并设置该对象的值。
每当您想要将焦点恢复到最后一项时,您可以调用[your object].SetFocus()
。
这只是一个想法。看看它是否有帮助。