#c# #winforms #global-variables
#c# #winforms #глобальные переменные
Вопрос:
Я пытаюсь запустить событие button1_Click, расположенное в UserControl2, из UserControl1.
Элементы управления загружаются динамически из моей основной формы
//UserControl2
public partial class ItemsModule : UserControl
{
private void ButtonRefreshProperties_Click(Object sender, EventArgs e)
{
RefreshControls();
}
public void RefreshControls()
{
SomeCode();
}
}
/// MainForm this is how i add the Control from the Main Form
ItemsModule im = new ItemsModule();
im.Name = "ItemsModule";
flpModules.Controls.Add(im);
//UserControl1
public partial class TreeViewControl : UserControl
{
private void ItemTreeView_MouseDoubleClick(Object sender, MouseEventArgs e)
{
String ItemId = ItemTreeView.SelectedNode.Name;
Variables.CurrentItemID = ItemId;
if (LoadedModules.Items)
{
//Here I would like a way to trigger ItemsModule.ButtonRefreshProperties_Click
}
}
}
Комментарии:
1. Создайте событие, чтобы форма могла вызывать RefreshControls.
Ответ №1:
UserControl1
необходимо будет иметь ссылки на UserControl2
. Как только у вас есть ссылка, UserControl1
следует вызвать метод UserControl2
, который вызывает событие, вызываемое.
Вы можете передать ссылку на UserContro2
в UserControl1
через конструктор, вспомогательный элемент или свойство в зависимости от того, как структурировано ваше приложение. Вы должны сохранить ссылку в закрытом поле UserControl1
, чтобы вы могли получить к ней доступ из DoubleClick
обработчика событий.
Это также можно настроить другими способами. Вы могли бы сделать UserControl2
быть свойством в родительской форме, тогда UserControl1 может привести это .Parent
свойство к правильному типу и использовать это свойство в качестве ссылки.
Вы также могли бы настроить 3-й класс как singleton
который имеет ссылку на UserControl2
.
Общим для всех этих решений является то, что каким-то образом UserControl1
необходимо иметь ссылку на UserControl2
, чтобы иметь возможность что-либо с этим делать.
Вы могли бы избежать проблемы со ссылкой, UserControl1
создав событие, которое прослушивает родительская форма. Поскольку родительская форма уже должна содержать ссылки на все элементы управления в ней, вы можете заставить форму передавать вызовы в UserControl2
для вас.
Комментарии:
1. к сожалению, первые решения не будут работать. Я добавил ссылку между 2 проектами (UserControls), щелкнув правой кнопкой мыши -> Добавить ссылку. и я не могу заставить это работать
2. Вы путаете два разных использования «ссылки» в .net. Я говорю о ссылке на переменную, а не о ссылке на сборку. Для использования в этом ответе считайте, что «ссылка на …» примерно эквивалентна «переменной, указывающей на …»