【问题标题】:Winforms c# - Set focus to first child control of TabPageWinforms c# - 将焦点设置到 TabPage 的第一个子控件
【发布时间】:2008-09-07 18:57:24
【问题描述】:

假设我有一个 Textbox 嵌套在 TabControl 中。

当表单加载时,我想关注Textbox(默认情况下,焦点设置为TabControl)。

在表单的Load 事件中简单地调用textbox1.focus() 似乎不起作用。

我已经能够通过执行以下操作来集中注意力:

 private void frmMainLoad(object sender, EventArgs e)
 {
     foreach (TabPage tab in this.tabControl1.TabPages) 
     {
         this.tabControl1.SelectedTab = tab;
     }
 }

我的问题是:

有没有更优雅的方法来做到这一点?

【问题讨论】:

    标签: c# .net winforms focus


    【解决方案1】:

    解决方法如下:

    private void frmMainLoad(object sender, EventArgs e)
    {
        ActiveControl = textBox1;
    }
    

    然而,更好的问题是为什么...我不完全确定这个问题的答案是什么。

    编辑:我怀疑这与表单和 TabControl 都是容器这一事实有关,但我不确定。

    【讨论】:

      【解决方案2】:

      尝试将其放入Form_Shown() 事件中。因为它在容器中,所以放入 Form_Load 甚至 Form() 构造函数都不起作用。

      【讨论】:

      • 它在加载中不起作用,因为加载后,控件会根据标签顺序重新聚焦,并且聚焦的控件被“覆盖”。当您将控件聚焦在 Shown 中时,不会通过聚焦另一个控件来“覆盖”您的调用。
      【解决方案3】:

      尝试使用textbox1.Select() 而不是textbox1.Focus()。这帮助了我几次。

      【讨论】:

        【解决方案4】:

        您只需将控件的 Control.Select() 添加到此代码中。当出现错误时,我已使用它在验证期间将焦点集中在控件上。

        private void ShowControlTab(Control ControlToShow)
            {
                if (!TabSelected)
                {
                    if (ControlToShow.Parent != null)
                    {
                        if (ControlToShow.Parent.GetType() == typeof(TabPage))
                        {
                            TabPage Tab = (TabPage)ControlToShow.Parent;
                            if (WOTabs.TabPages.Contains(Tab))
                            {
                                WOTabs.SelectedTab = Tab;
                                TabSelected = true;
                                return;
                            }
                        }
        
                        ShowControlTab(ControlToShow.Parent);
                    }
                }
            }
        

        【讨论】:

          【解决方案5】:

          我在另一个用户控件中有一个用户控件。 textbox1.Select() 对我有用,但 textbox1.Focus() 不起作用。

          你也可以尝试设置 Tabstop 为 false,textbox1.Focus(),TabStop 为 true。

          【讨论】:

            【解决方案6】:
              private void ChildForm1_Load(object sender, EventArgs e)
                    {
                        ActiveControl = txt_fname;
            
                    }
            

            我使用这个代码,它在 win tab control 或 dotnetbar supertab contrl 上运行良好

            【讨论】:

              猜你喜欢
              • 2016-10-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-11-25
              • 2011-06-15
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多