Форма Windows - клавиша Tab не работает в дочерней панели - PullRequest
3 голосов
/ 25 января 2010

У меня есть дочерняя панель в форме, которая содержит несколько текстовых полей и кнопок. Я попытался настроить свойства tabstop и tabindex для этих элементов управления, чтобы пользователь мог переходить от одного элемента к другому. Но по какой-то причине не работает табуляция, курсор остается на том же поле, которое имеет фокус, когда я нажимаю клавишу табуляции. Я использую C # с .Net 3.5 framework. Вот как выглядит мой код -

  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 голосов
/ 27 июня 2012

Другая возможная проблема заключается в том, что форма, в которой не работает вкладка, находится в форме, которая не отображается модально.

По некоторым причинам «табуляция» иногда не работает, если дочерняя форма отображается с .show, и вы предпочитаете отображать форму с .ShowDialog.

2 голосов
/ 14 апреля 2016

Если форма немодальная (отображается с помощью .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.

1 голос
/ 25 января 2010

Решением является установка TabStop = true на панели.

Я только что провел небольшой тест, и кажется, что winforms не будут вкладываться в дочернюю панель, если за пределами панели нет других фокусируемых элементов управления.

На самом деле вы не станете вкладывать «на» панель, но она поможет вам разобраться с этой проблемой, которую вы видите, и перейдет на первый дочерний элемент управления.

0 голосов
/ 25 января 2010

Убедитесь, что вы также установили tabindex для меток, несмотря на то, что он не фокусируется.

В окне дизайнера VS, с вашей формой на экране в дизайне больше, нажмите

  • Просмотр меню
  • Пункт меню Tab Order

укажите и щелкните, чтобы установить последовательный порядок элементов управления (включая метки).

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

...