Нарушение только для чтения в списке < T > в C #? [Дубликат]

Наиболее распространенный совет по этой проблеме в StackOverflow и MSDN 1 , 2 (включая принятый ответ здесь) является быстрым и легким:

События

KeyDown запускаются на Form, пока его свойство KeyPreview установлено на true

. Это подходит для большинства целей, но это рискованно по двум причинам:

  1. KeyDown обработчики не видят всех клавиш . В частности, «вы не можете видеть типы нажатий клавиш, которые используются для навигации. Подобно клавишам курсора, Tab, Escape и Enter для диалога».
  2. Существует несколько способов перехвата ключевых событий , и все они происходят последовательно. KeyDown обрабатывается последним . Следовательно, KeyPreview не является большим количеством предварительного просмотра, и это событие может быть отключено на несколько остановок на этом пути.

(кредит для @HansPassant для этих точек.)

Вместо этого переопределите ProcessCmdKey в вашем Form:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
    if (keyData == Keys.Up)
    {
        // Handle key at form level.
        // Do not send event to focused control by returning true.
        return true;
    }
  return base.ProcessCmdKey(ref msg, keyData);
}

Таким образом, все клавиши видны методу, и метод первый в строке, чтобы увидеть событие.

Обратите внимание, что вы все еще имеете контроль над тем, контролировали ли сфокусированные элементы управления событие KeyDown. Просто верните true, чтобы заблокировать последующее событие KeyDown, вместо установки KeyPressEventArgs.Handled на true, как это было бы в обработчике события KeyDown. Здесь - статья с более подробной информацией.

-1
задан Dhivya Sadasivam 27 February 2019 в 13:35
поделиться

1 ответ

Согласно документации :

В объявлении поля readonly указывает, что присвоение полю может происходить только как часть объявления или в конструкторе в того же класса.

Вы делаете это точно, присваивая внутри конструктора.

Сам список является readonly, а не его содержание.

0
ответ дан iSpain17 27 February 2019 в 13:35
поделиться
Другие вопросы по тегам:

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