3

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

  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

4 回答 4

5

另一个可能的问题是,如果“制表符”不起作用的表单位于非模态显示的表单上。

由于某些原因,如果子表单使用 显示,“制表符”有时不起作用.show,您宁愿使用 显示表单.ShowDialog

于 2012-06-27T14:48:55.823 回答
2

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

    private void YourForm_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Tab)
        {
            if (e.Modifiers == Keys.Shift)
                this.ProcessTabKey(false);
            else
                this.ProcessTabKey(true);
        }
    }

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

于 2016-04-14T12:35:44.040 回答
1

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

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

您实际上不会最终将选项卡“放在”面板上,但它可以帮助您解决您所看到的这个问题,并且它会选项卡到它的第一个子控件。

于 2010-01-25T16:28:35.433 回答
0

确保你也为标签设置了 tabindex,尽管它是不可聚焦的。

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

  • 查看菜单
  • 选项卡顺序菜单选项

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

希望这会有所帮助,最好的问候,汤姆。

于 2010-01-25T16:00:46.390 回答