Ошибка дизайнера при перенаправлении нажатия кнопки в пользовательском элементе управления - PullRequest
1 голос
/ 12 июня 2019

Я создал пользовательский элемент управления, который по сути является пользовательской кнопкой в ​​моем приложении Windows Form Мне удалось перенаправить событие click на следующий код:

Control[] customButtonControls = button.Controls.Find("buttonInUserControl", false);
Button nestedButton = (Button)customButtonControls[0];
nestedButton.Click += new System.EventHandler(this.button_click_handling_function);

Я добавил это в файл Window_Name.Designer.cs ниже сгенерированного кода для элемента управления с моим button_click_handling_function, определенным в моем файле Window_Name.cs.

Проблема заключается в том, что когда я снова щелкаю на странице Window_Name.cs [Design], меня встречает страница с ошибкой. Я включу снимки экрана, чтобы лучше показать ошибки. По сути это супер бесполезная страница. Это говорит мне, что у меня есть ошибка индекса вне диапазона в моем массиве, но вызов стека не имеет смысла.

Если я пытаюсь построить свое Решение, я не сталкиваюсь с ошибками компиляции, и моя программа работает точно так, как задумано. Событие click запускает функцию так же, как и раньше.

Заранее спасибо.

WinForms Error ScreenGrab

1 Ответ

0 голосов
/ 12 июня 2019

Части кода конструктора выполняются во время разработки. Ошибка индекса вне диапазона, вероятно, связана с тем, что во время разработки при вызове Find еще не было найдено никаких элементов управления, поэтому массив пуст. Вы не проверяете длину 0, поэтому при отмене ссылки вы получаете ошибку. Он работает во время выполнения, потому что в этот момент были созданы экземпляры элементов управления.

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

...