我有一个包含一些文本框和按钮的表单中的子面板。我尝试为这些控件设置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);
答案 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设计器窗口中,将您的表单更多地设计在屏幕上,单击
指向并单击以设置控件的顺序(包括标签)。
希望这有帮助, 最好的祝福, 汤姆。