ANKIT_JHA Ответов: 1

Динамический вызов пользовательского элемента управления в форме


Привет эксперты,

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

Заранее спасибо,
Анкит

Mahesh_Bhosale

Можете ли вы поделиться фрагментом кода, где вы создаете экземпляр для пользовательского управления..?

ANKIT_JHA

частная ListGridList_LinkLabelClicked недействительным(объект отправителя, LinkLabelEventArgs linkLabelEventArgs)
{
инт параметр rownum = linkLabelEventArgs.параметр rownum;
строка SoNbr = ((ListGridList)sender).DataSet.Таблицы["listItem"].строки[rowNum]["SoNbr"].Метод toString().Отделка();
Ящик для сообщений.Шоу(SoNbr);
lstClosedSO.ShowListGrid();
ClosedSOUserControl CSOUCobj = новый ClosedSOUserControl();
Чукобж.Управления.Добавить(CSOUCobj);

}

ANKIT_JHA

CSOUobj - это экземпляр пользовательского элемента управления..и событие ListGridList_LinkLabelClicked находится в форме

1 Ответов

Рейтинг:
6

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 (потому что нет никакого способа соблюдать их при генерации кода, который не "знает" вашу семантику), всегда используйте семантически чувствительные имена. Для добавления обработчиков событий лучше использовать анонимные методы.

—СА