Sergey Alexandrovich Kryukov
Нет такой вещи, как "вызов управления". Элемент управления-это не метод, функция, процедура, подпрограмма, свойство или оператор.
Кроме того, не существует "динамических" или "статических" способов добавления элемента управления. Это всегда "динамично". Когда вы используете конструктор, он просто пишет код для добавления элементов управления в формы.
Итак, "секретное оружие" просто: если вы не знаете, как сделать что-то в коде, попробуйте сделать это в конструкторе, просто чтобы сделать образец кода. Когда это будет сделано, посмотрите на автоматически сгенерированный код (в формах он помещается как дочерний узел узла формы в обозревателе решений Visual Studio) и узнайте, как это сделать.
Например:
Panel parentPanel = new Panel();
//... let's assume the panel is already added
TextBox myTextBox = new TextBox();
Button myButton = new Button();
// take care about layout, name, etc.
// now, events:
myButton.Click += (sender, eventArgs) => { DoSomethingOnButtonClick(); };
// equivalent way good for old C# v.2:
myButton.Click += delegate(object sender, System.EventArgs eventArgs) { DoSomethingElseOnButtonClick(); };
// add them:
myButton.Parent = parentPanel;
// another equivalent way to add
parentPanel.Controls.Add(myTextBox);
// the panel itself was added in the same way;
// all the way to the Form, which is also a Control...
[РЕДАКТИРОВАТЬ]
Теперь порядок действий:
Вам нужно вставить элементы управления в обратном порядке относительно порядка навигации по вкладкам. Вы также можете настроить
TabOrder
ценности.
Если форма уже отображается на экране, вы все еще можете добавить элементы управления, но, по-видимому, последние операции должны быть
Controls.Add
, чтобы избежать возможного мерцания. Если форма не отображается в момент добавления элемента управления, это правило не важно, но, для универсального подхода и лучшего обслуживания, я бы посоветовал добавлять элементы управления на последних шагах, когда добавляется макет.
Обычный способ предотвратить мерцание макета-это прослоить код внутри
SuspendLayout/ResumeLayout
родительского контроля верхнего уровня, как правило
Form
:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.suspendlayout.aspx[
^],
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.resumelayout.aspx[
^].
[КОНЕЦ РЕДАКТИРОВАНИЯ]
Опять же, если вы не знаете, как делается что-то еще, попробуйте сделать это с помощью конструктора и посмотрите, как это делается в автоматически генерируемом коде. Но не копируйте стиль кодирования, никогда не используйте автоматически сгенерированные имена, они нарушают соглашения об именах Microsoft (потому что нет никакого способа соблюдать их при генерации кода, который не "знает" вашу семантику), всегда используйте семантически чувствительные имена. Для добавления обработчиков событий лучше использовать анонимные методы.
—СА