Я предполагаю, что каждая пользовательская кнопка является ее собственным экземпляром для отдельных элементов управления пользователя?
Если это так, вы можете запереть события кнопки в родительской форме. Если вы открываете отдельные кнопки через свойство, вы можете привязать их к событиям Click. Как и все элементы управления, у них есть свойство name, поэтому у вас может быть один метод, который вызывается для всех событий нажатия кнопок.
Ниже у меня есть примерный пример кода. У меня есть два пользовательских элемента управления, каждый из которых имеет по одной кнопке. Кнопка UC1 называется «btn1» и «btn2» для UC2. Я называю обнаженное свойство «ButtonOK»
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public Button ButtonOK
{
get { return btn1; }
}
}
public partial class UserControl2 : UserControl
{
public UserControl2()
{
InitializeComponent();
}
public Button ButtonOK
{
get { return btn2; }
}
}
Теперь на родителе («Form1») при загрузке имеет mthod, которая связывает в замковых события каждой кнопки, но он вызывает тот же метод. Внутри метода я проверяю свойство «Имя».
public Form1()
{
InitializeComponent();
}
void Form1_Load(object sender, EventArgs e)
{
RegisterButtonEvents();
}
void RegisterButtonEvents()
{
userControl11.ButtonOK.Click += new EventHandler(ButtonOK_Click);
userControl21.ButtonOK.Click += new EventHandler(ButtonOK_Click);
}
void ButtonOK_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
if (btn != null)
{
if (btn.Name == "btn1")
{
Console.WriteLine(" ButtonOK from UserControl1 was pushed. The tag is " + btn.Tag.ToString());
}
else if (btn.Name == "btn2")
{
Console.WriteLine(" ButtonOK from UserControl2 was pushed. The tag is " + btn.Tag.ToString());
}
}
}
Вы также можете использовать свойство «Тег» элемента управления. Это свойство может быть очень полезным, поскольку оно может ссылаться на объекты.
Вам не нужно делать то, что показано, но вы можете использовать любую форму «Родитель», чтобы получить ссылку на UserControls, заставить их открывать свои кнопки, тогда вы можете делать все, что хотите, со свойствами и событиями из тех Кнопки (или любой контроль в этом отношении).
Имейте в виду, что если вы также привязываетесь к событию клика в пользовательском элементе (в дополнение к родительской форме), вам нужно будет помнить о порядке, в котором он будет перечислять через него список делегатов и выполнить код после события.
Надеюсь, что это поможет.
Эта статья мне полезна: [Установка AcceptButton для UserControl] (http://samgaut.blogspot.de/2008/04/winform-default-button-pressed.html) – algreat