首页 文章

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

提问于
浏览
3

我有一个包含一些文本框和按钮的表单中的子面板 . 我尝试为这些控件设置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 回答

  • 5

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

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

  • 0

    如果表单是无模式的(用.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 .

  • 2

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

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

    你实际上不会最终选中“进入”面板,但是它可以帮助你解决这个问题,它将会显示它的第一个子控件 .

  • 1

    尽管它不可调焦,但也要确保为标签设置tabindex .

    从VS设计器窗口,在屏幕上的设计更多,点击

    • 查看菜单

    • Tab Order菜单选项

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

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

相关问题