Мнемоника Windows.Forms не работает

У меня более или менее та же проблема, что и у этого парня, но его посту 2 года, поэтому я подумал, что могу открыть новый.

В программе я использую метки и, как я выяснил, мнемоника на метках вызывает enter событие следующего элемента управления в порядке вкладок. Так реализовано click а также enter методы. Но здесь есть проблема. Я создал тестовую программу. Программа сохраняется из двух меток, кнопки и текстового поля.

макет тестовой программы

порядок вкладок тестовой программы

Второй ярлык просто для контроля, если enter событие запущено. Когда я ударил ALT Подчеркивание выглядит нормально, но когда я нажимаю вторую клавишу (для Reset) Ничего не произошло. Кроме того, если появляется подчеркивание, и я нажимаю ALT ключ снова он не исчезает и button полностью игнорирует, если ALT нажата или нет. Я перешел на другой компьютер с VisualStudio 2013, но получил тот же результат. Я скачал VisualStudio 2017, попытался создать новую программу => тоже не работает.

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

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void reset_Click(object sender, EventArgs e)
        {
            textBox.Text = "";
        }

        private void button_Click(object sender, EventArgs e)
        {
            textBox.Text = "Button";
        }

        private void nothing_Enter(object sender, EventArgs e)
        {
            textBox.Text = "nothing";
        }
    }
}

Form1.Designer.cs

        this.reset.Click += new System.EventHandler(this.reset_Click);
        this.button.Click += new System.EventHandler(this.button_Click);
        this.nothing.Enter += new System.EventHandler(this.nothing_Enter);

1 ответ

Решение

Когда вы используете мнемонику над меткой - фокус переходит на следующий выбираемый объект в форме с индексом вкладки HIGHER (он не переносится на следующий выбираемый элемент управления, как вкладка). Так как метки по умолчанию недоступны для выбора - тогда у вас нет выбранного элемента управления после сброса метки - значит, ничего не происходит.

Если вы добавите другой выбираемый элемент управления с более высоким индексом вкладки - скажем, текстовое поле со значением индекса вкладки, установленным в 4 - то вы обнаружите, что нажатие Alt-r приведет к тому элементу управления, который вы ожидаете.

Если вы хотите сделать метки доступными для выбора, то вы можете создать производный класс, как показано в ответе здесь: Сделайте так, чтобы метка участвовала во вкладках элемента управления - если вы сделаете метку "пусто" в SelectableLabel - тогда нажатие Alt-r приведет к перемещению фокуса на этот ярлык.

Другие вопросы по тегам