Предположим, что у меня есть проект WinFoms. Существует только одна кнопка (например, button1
).
Вопрос: возможно ли инициировать событие ButtonClicked
через код, не нажав на него?
Предположим, что у меня есть проект WinFoms. Существует только одна кнопка (например, button1
).
Вопрос: возможно ли инициировать событие ButtonClicked
через код, не нажав на него?
Элементы управления Button имеют метод PerformClick(), который вы можете вызвать.
button1.PerformClick();
В .NET Framework используется шаблон, где для каждого события X
существует метод protected void OnX(EventArgs e) {}
, который вызывает событие X
. См. Статью Msdn. Чтобы поднять событие за пределами объявляющего класса, вам нужно будет получить класс и добавить общедоступный метод обертки. В случае Button
это будет выглядеть так:
class MyButton : System.Windows.Forms.Button
{
public void ProgrammaticClick(EventArgs e)
{
base.OnClick(e);
}
}
Вы можете просто вызвать функцию обработчика событий напрямую и указать null
для отправителя и EventArgs.Empty
для аргументов.
void ButtonClicked(object sender, EventArgs e)
{
// do stuff
}
// Somewhere else in your code:
button1.Click += new EventHandler(ButtonClicked);
// call the event handler directly:
ButtonClicked(button1, EventArgs.Empty);
Или, скорее, вы переместите логику из события ButtonClicked
в свою собственную функцию, а затем ваш обработчик событий и другой код, который у вас есть, в свою очередь вызовет новую функцию.
void StuffThatHappensOnButtonClick()
{
// do stuff
}
void ButtonClicked(object sender, EventArgs e)
{
StuffThatHappensOnButtonClick();
}
// Somewhere else in your code:
button1.Click += new EventHandler(ButtonClicked);
// Simulate the button click:
StuffThatHappensOnButtonClick();
Последний метод имеет то преимущество, что позволяет вам разделить бизнес и логику пользовательского интерфейса. У вас действительно не должно быть никакой бизнес-логики в обработчиках контрольных событий.
Да, просто вызовите метод так, как вы могли бы назвать любое другое. Например:
private void btnSayHello_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello World!");
}
private void btnTriggerHello_Click(object sender, EventArgs e)
{
btnSayHello_Click(null, null);
}
button1.PerformClick();
Но если вам нужно что-то сделать, возможно, лучше переместить код, который у вас есть в событии, по новому методу?
используйте цикл for для вызова события button_click
private void btnadd_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i <= 2; i++)
StuffThatHappensOnButtonClick();
}
void StuffThatHappensOnButtonClick()
{
........do stuff
}
мы предполагаем, что по крайней мере один раз вам нужно нажать кнопку
Почему бы вам просто не ввести код события в метод. Затем выполните Событие с помощью метода. Таким образом, если вам нужно выполнить тот же код, что и событие, вы можете, а просто просто вызвать "Метод".
void Event_Method()
{
//Put Event code here.
MessageBox.Show("Hello!");
}
void _btnSend_Click(object sender, EventArgs e)
{
Event_Method();
}
void AnotherMethod()
{
Event_Method();
}
Имеют смысл? Теперь событие "Click" И в любом месте кода вы можете запустить тот же код, что и событие "Click".
Не запускайте событие, вызывайте метод, который вызывает событие.;)