Windows窗体 - Tab键在子面板中不起作用

时间:2010-01-25 15:43:19

标签: c# winforms tabbing

我有一个包含一些文本框和按钮的表单中的子面板。我尝试为这些控件设置tabstop和tabindex属性,以便用户可以从一个控件切换到下一个控件。但由于某种原因,标签不起作用,当按下标签键时,弯曲停留在同一个具有焦点的区域。我正在使用C#和.Net 3.5框架。以下是我的代码的样子 -

  rightPanel.Controls.Clear();
        marketMessageLabel = new Label();
        marketMessageLabel.Location = new Point(0, 20);            
        marketMessageLabel.AutoSize = false;
        marketMessageLabel.Size = new Size(rightPanel.Width, 42);
        marketMessageLabel.BackColor = Color.White;            
        marketMessageLabel.Font = new System.Drawing.Font("Verdana", 8.00F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
        rightPanel.Controls.Add(marketMessageLabel);                        

        signinUserNameLabel = new Label();
        signinUserNameLabel.Location = new Point(0, 150);
        signinUserNameLabel.Size = new Size(60, 14);
        signinUserNameLabel.BackColor = Color.White;
        signinUserNameLabel.Text = "User Name";            
        signinUserNameLabel.Font = new System.Drawing.Font("Verdana", 9.00F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
        rightPanel.Controls.Add(signinUserNameLabel);

        signinUserNameTextBox = new TextBox();
        signinUserNameTextBox.Location = new Point(0, 170);
        signinUserNameTextBox.Width = this.Width - 80;
        signinUserNameTextBox.Font = new System.Drawing.Font("Verdana", 9.00F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));         
        signinUserNameTextBox.TabIndex = 0;
        signinUserNameTextBox.TabStop = true;

        rightPanel.Controls.Add(signinUserNameTextBox);

        signinPasswordLabel = new Label();
        signinPasswordLabel.Location = new Point(0, 192);
        signinPasswordLabel.Size = new Size(100, 14);
        signinPasswordLabel.Font = new System.Drawing.Font("Verdana", 9.00F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
        signinPasswordLabel.BackColor = Color.White;
        signinPasswordLabel.Text = "Password";            
        rightPanel.Controls.Add(signinPasswordLabel);                      

        signinPasswordTextBox = new TextBox();
        signinPasswordTextBox.Location = new Point(0, 210);
        signinPasswordTextBox.Width = this.Width - 80;            
        signinPasswordTextBox.PasswordChar = '*';
        signinPasswordTextBox.TabIndex = 1;
        signinPasswordTextBox.TabStop = true;
        rightPanel.Controls.Add(signinPasswordTextBox);

        signInButton = new Button();
        signInButton.Text = "Sign In";
        signInButton.Font = new System.Drawing.Font("Verdana", 9.00F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
        signInButton.Width = 70;            
        signInButton.BackColor = Color.White;
        signInButton.Location = new Point(0,240);
        signInButton.Click += new EventHandler(signInButton_Click);
        signInButton.TabIndex = 2;
        signInButton.TabStop = true;
        rightPanel.Controls.Add(signInButton);

4 个答案:

答案 0 :(得分:5)

另一个可能的问题是,如果“标签”不起作用的表单是在未以模态方式显示的表单上。

出于某些原因,如果使用.show显示子表单,“tabbing”有时不起作用,而您更愿意使用.ShowDialog显示表单。

答案 1 :(得分:2)

如果表单是无模式的(用.Show()显示),那么你需要添加以下代码来处理keyDown事件:

@model IEnumerable<oltinternational_mvc.Models.Course_page>
<div id="main_container">
<article class="content">
    <h1>{@Html.DisplayNameFor(modelItem => cpage.Title)}</h1>
</article>
</div>

您还需要将KeyPreview属性设置为True。

答案 2 :(得分:1)

解决方法是在面板上设置TabStop = true。

我刚刚进行了一些测试,如果面板外没有其他可聚焦控件,似乎winforms不会进入子面板。

你实际上不会最终选中“放到”面板上,但是它会让你解决这个问题,并且会看到它的第一个子控件。

答案 3 :(得分:0)

确保您也为标签设置tabindex,尽管它不可​​调焦。

在VS设计器窗口中,将您的表单更多地设计在屏幕上,单击

  • 查看菜单
  • Tab Order菜单选项

指向并单击以设置控件的顺序(包括标签)。

希望这有帮助, 最好的祝福, 汤姆。