Мнемоника 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 приведет к перемещению фокуса на этот ярлык.