KeyDown: распознавание нескольких ключей

Попробуйте это

async method() {
    const userInfo = await this.nrcService.getUserInfo();
    if (!!userInfo) {
        this.userInfo = userInfo;
    }
    if (!!this.userInfo) {
        report = {
            ReportType: reportType,
            ReportID: id,
            ReportFormat: format,
            ReportName: `${reportType}_${id}`,
            Filters: shouldNotParseFilters ? filterContent : [],
            ViewFields: columns || [],
            OrgName: this.userInfo[0].orgname,
            FullName: this.userInfo[0].fullname
        } as SavedReport;

        if (!shouldNotParseFilters) {
            this.reportFilterService.mapReportFilters(<ReportFilterContext>filterContent, report);
        }

        report.Filters.push({ 'maxitems': [-1] });
        this.nrcService.downloadReport(report, fileName).subscribe({ error: err => this.nrcService.handleError(err) });
    } else {
        // ...
    }
}
34
задан Vukašin Manojlović 9 January 2013 в 12:52
поделиться

6 ответов

если (e. Управление & & e. Сдвиг & & e. KeyCode == Ключи. A) {

}

0
ответ дан 27 November 2019 в 16:52
поделиться

Со страницы MSDN на KeyEventArgs :

if (e.KeyCode == Keys.F1 && (e.Alt || e.Control || e.Shift))
{
    //Do stuff...
}
13
ответ дан 27 November 2019 в 16:52
поделиться

Вы можете проверить модификаторы KeyEventArgs следующим образом:

private void listView1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Up && e.Modifiers == Keys.Control)
    {
        //do stuff
    }
}  

Ссылка MSDN

30
ответ дан 27 November 2019 в 16:52
поделиться

В KeyEventArgs есть свойства Ctrl , Alt и Shift , который показывает, нажаты ли эти кнопки.

7
ответ дан 27 November 2019 в 16:52
поделиться

вы должны запомнить нажатые клавиши (т.е. в массиве bool). и установите позицию на 1, когда она нажата (клавиша вниз) и на 0.

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

, чтобы вы могли сделать:

 if (e.KeyCode == Keys.Control)
 {
        keys[0] = true;
 }
// could do the same with alt/shift/... - or just rename keys[0] to ctrlPressed

if (keys[0] == true && e.KeyCode == Keys.Up)
 doyourstuff
-2
ответ дан 27 November 2019 в 16:52
поделиться

Вы можете использовать свойство ModifierKeys:

if (e.KeyCode == Keys.Up && (ModifierKeys & Keys.Control) == Keys.Control)
{
    // CTRL + UP was pressed
}

Обратите внимание, что значение ModifierKeys может быть комбинацией значений, поэтому, если вы хотите обнаружить, что CTRL был нажат независимо от состояния клавиш SHIFT или ALT , вам нужно будет выполнить побитовое сравнение, как в моем примере выше. Если вы хотите убедиться, что никакие другие модификаторы не использовались, вы должны вместо этого проверить равенство:

if (e.KeyCode == Keys.Up && ModifierKeys == Keys.Control)
{
    // CTRL + UP was pressed
}
2
ответ дан 27 November 2019 в 16:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: