Подтвердить что ты не робот

Что делает так, что не все события доступны в дизайнере, и как я могу быстро генерировать обработчики на С#, например, в VB.NET?

В конструкторе форм Visual Studio вы можете добавить обработчик события в окне "Свойства" в списке "События", дважды щелкнув его. Вы также можете добавить обработчик событий — по крайней мере, в VB.NET -— в представлении кода, выбрав соответствующий элемент "События" в раскрывающемся списке слева, а затем нужное событие в правом раскрывающемся списке. Мой вопрос: каким образом некоторые события доступны только по последней технике, а не по первой? Например, событие HandleCreated доступно в представлении кода:

enter image description here

Но не в дизайнере:

enter image description here

Это хорошо в VB.NET, потому что я всегда могу использовать первый метод для быстрого создания обработчиков событий. Однако в С# первый метод невозможен, но проблема все еще существует; то есть некоторые события отсутствуют в списке конструкторов в окне "Свойства" . Единственный другой способ создания обработчика событий - это вручную добавить его, который включает в себя ручную проводку обработчика событий.

Есть ли что-то техническое, что делает его таким, чтобы некоторые события отсутствовали в списке событий Designer в окне "Свойства" ? Учитывая, что это правда, как я могу быстро генерировать обработчики событий на С#, как я могу в VB.NET?

4b9b3361

Ответ 1

Ну, это скрыто намеренно. Если вы посмотрите на класс управления, событие HandleCreated помечено Browsable(false), что означает не показывать его в окне свойств.

[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Advanced)]
public event EventHandler HandleCreated;

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

Я предполагаю, что они скрывают события, которые не важны. Сколько раз вам нужно подписаться HandleCreated? Обычно вы подписываетесь на событие Load.

Некоторые другие хорошие примеры событий, которые относятся к одной категории, - это ControlAdded, ControlRemoved и т.д. Как вы можете видеть, они не очень важны, они скрыты от дизайнера.

Как легко подписаться на событие в редакторе С# как на VB.net?

Вы не можете получить поле со списком событий, которое вы получите для VB.net; Ближе всего вы можете получить поддержку ide, которая может автозаполняться для вас (что уже упоминалось в ответе @HenkHolterman, теперь удалено).

введите this.HandleCreated +=, затем tab, tab.

Ide подключит для вас события.

Ответ 2

VB.NET и С# IDE только внешне выглядят одинаково. Они работали от довольно приличной спецификации. Но в тех случаях, когда сходство прекращается, они создавались двумя разными группами в Microsoft и имеют совершенно разные кодовые основы. В противном случае стратегия выживания для крупных компаний-разработчиков программного обеспечения, большие группы не работают.

Самое главное, у них были совершенно разные цели. Команде С# была роскошь начинать полностью с нуля, всегда приятно, когда у вас не было никого, кто мог бы оставаться счастливым и не иметь багажа, чтобы завязать. Не так для команды VB.NET Visual Basic был очень популярным продуктом в течение очень долгого времени с сильной поддержкой IDE, которая насчитывает 25 лет. Самым важным для них было дать своим клиентам знакомый опыт, VB.NET уже стал серьезным потрясением, которое было очень противоречивым.

Как эти две комбинированные поля в верхней части окна редактирования были заброшены в камень из гранитного камня. Они никогда ничего не фильтровали. Если программист VB.NET написал обработчик события для события, он ожидает, что он всегда найдет его в поле со списком. Он работает и наоборот, VB.NET IDE скрывает много информации. Как не показывать автоматически сгенерированные исходные файлы в окне обозревателя решений.

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

Ответ 3

Представьте, что у вас есть пользовательский элемент управления, который имеет как свойства пользовательского интерфейса, так и не-пользовательский интерфейс. Вам нужно украсить не-пользовательские свойства с помощью Browsable(False), чтобы они не были доступны через окно свойств.

Ответ 4

Чтобы ответить на второй вопрос, вы не можете быстро создавать обработчики событий, как в VB.NET. Это одно из отличий VB.NET от С# от синтаксиса.

В VB.NET вы можете украсить поле с помощью модификатора WithEvents, что является требованием для создания "быстрых обработчиков событий". Это переводит на новое свойство, которое будет делать для вас все материалы регистрации событий. Этот WithEvents неявно создается для этого (или Me) указателя. С# не имеет этой функции синтаксиса и, следовательно, это невозможно, поэтому вам нужно сделать это вручную. В конце концов, разница между VB.NET и С# никогда не была только синтаксисом, почти единственным синтаксисом:)

Я предполагаю, что причина в том, что С# был разработан, чтобы ограничить количество ключевых слов до минимума, в то время как Microsoft никогда не пыталась добавить больше ключевых слов для VB.NET. Если вы рассматриваете элементы синтаксиса LINQ, в VB.NET есть несколько новых ключевых слов, чем на С#.