我有一个包含一些文本框和按钮的表单中的子面板 . 我尝试为这些控件设置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 回答
另一个可能的问题是,“tabbing”不起作用的表单是在未以模态方式显示的表单上 .
由于某些原因,如果使用
.show
显示子表单,"tabbing"有时不起作用,而您更愿意使用.ShowDialog
显示表单 .如果表单是无模式的(用.Show()显示),那么您需要添加以下代码来处理keyDown事件:
您还需要将KeyPreview属性设置为True .
解决方案是在面板上设置TabStop = true .
我刚刚进行了一些测试,如果面板外没有其他可聚焦控件,似乎winforms不会进入子面板 .
你实际上不会最终选中“进入”面板,但是它可以帮助你解决这个问题,它将会显示它的第一个子控件 .
尽管它不可调焦,但也要确保为标签设置tabindex .
从VS设计器窗口,在屏幕上的设计更多,点击
查看菜单
Tab Order菜单选项
指向并单击以设置控件的顺序(包括标签) .
希望这会有所帮助,最好的问候,汤姆 .