Есть ли способ удалить сочетания клавиш Alt из элементов управления во время выполнения? - PullRequest
2 голосов
/ 18 марта 2010

У меня есть диалог с несколькими сочетаниями клавиш Alt-Letter на ярлыках для текстовых полей и т. Д. Этот диалог может представлять данные либо в редактируемом, либо в режиме только для чтения. Я получил запрос на скрытие подчеркивания для ярлыков, если диалог находится в режиме только для чтения. Кроме редактирования текста метки во время выполнения (тьфу) есть ли способ удалить их?

Если вы не знаете, что я имею в виду с помощью сочетаний клавиш alt-Letter, см. этот вопрос.

Ответы [ 3 ]

2 голосов
/ 18 марта 2010

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

2 голосов
/ 18 марта 2010

Вы можете просто перебрать элементы управления и удалить амперсанды. Например:

public partial class dlgSample : Form {
    public dlgSample(bool isReadOnly) {
        InitializeComponent();
        if (isReadOnly) ZapMnemonics(this.Controls);
    }

    private void ZapMnemonics(Control.ControlCollection ctls) {
        foreach (Control ctl in ctls) {
            if (ctl is Label || ctl is Button) ctl.Text = ctl.Text.Replace("&", "");
            ZapMnemonics(ctl.Controls);
        }
    }
}
0 голосов
/ 18 марта 2010

Вы можете попробовать установить для свойства KeyPreview формы значение true, а затем добавить обработчик для события KeyDown формы. Если нажатие клавиши является одним из сочетаний клавиш, установите для свойства Handled параметра KeyEventArgs значение true. Или вы можете установить для свойства .SuppressKeyPress переменной KeyEventArgs значение true.

Можно проверить свойство .Alt переменной KeyEventArgs, чтобы убедиться, что одновременно нажата клавиша Alt .

...