Элементы управления .NET и область действия

Как программист может обойти ограничения области действия при написании функций обработки событий, включающих элементы управления, которые объявлены не через графический интерфейс, а в основном исходном файле?

Является ли «приемлемым» объявление таких элементов управления в глобальной области видимости вместо Form1_Load() для решения этой проблемы?

private void Form1_Load(object sender, EventArgs e)
{
    ComboBox t = new ComboBox();
    Button b = new Button();
    b.OnClick += b_OnClick;
}

private void b_OnClick(object sender, OnClickEventArgs e)
{
    s.Add("Hello s!"); // The object s is a ComboBox control generated in the Designer GUI
    t.Add("Hello t!");
}

// Line 10 is valid.
// Line 11 is invaid because t does not exist in the current scope.  How might one work around this issue?

person user10478    schedule 22.06.2013    source источник
comment
Это нормально, потому что ссылки на ваши элементы управления добавляются в Controls вашей формы, однако, чтобы сослаться на один из ваших элементов управления, у вас нет другого способа, кроме как найти его в Controls вашей формы. Это не очень удобно.   -  person King King    schedule 22.06.2013


Ответы (1)


Я думаю, что это приемлемо, если вы посмотрите на файл form.designer, вы заметите, что все элементы управления, созданные с помощью дизайнера, являются глобальными. Поэтому я думаю, что вы могли бы сделать то же самое в своем собственном коде.

Однако я предполагаю, что бывают ситуации, когда вам не нужны эти элементы управления, иначе логика диктует, что вы создаете их непосредственно с помощью дизайнера и избегаете этого кода.

Конечно, в приведенном выше коде отсутствует абсолютно необходимая информация, такая как позиция, размер, имя и самое главное. Заявление Form.Controls.Add(control), но я не знаю, связано ли это с упрощением вашего вопроса.

person Steve    schedule 22.06.2013