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

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

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

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

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

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

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

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

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

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

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

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

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