保持对用户控制Windows应用程序的关注

时间:2016-11-27 05:32:41

标签: c# winforms focus

我正在使用c#的Windows应用程序。我创建了一个表单frmMain,在用户登录时加载。用户有4个选项,如客户创建供应商创建员工创建用户创建

Situation example

这很好用。

焦点出现问题。当用户加载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);
            }
        }

但是这个集合关注的是默认文本框。不受用户移动到其他用户控制的控制。

1 个答案:

答案 0 :(得分:0)

为了获得更好的答案,在您的问题中提供一些代码是一种很好的做法。 您可以使用SetFocus()方法手动操作焦点。对于您的问题,我相信您可以拥有Control类型的对象,然后您可以将其设置为您想要关注的默认控件。然后,您处理控件的所有GotFocus方法并设置该对象的值。 每当您想要将焦点恢复到最后一项时,您可以调用[your object].SetFocus()。 这只是一个想法。看看它是否有帮助。