Можно ли вызвать событие клика из другой формы? - PullRequest
10 голосов
/ 06 ноября 2010

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

  1. как мне объявить публичный элемент управления?
  2. как передать правильные события в button_click? он принимает два параметра - как мне их передать?

Ответы [ 5 ]

15 голосов
/ 06 ноября 2010

Почему бы не создать открытый метод в общем классе, в котором будут выполняться оба события click.

6 голосов
/ 06 ноября 2010

Можно создать элемент управления в Form public, но не рекомендуется, вы можете сделать следующее:

1) Объявить новое событие в первой форме (form1) ButtonFirstFormClicked

public event EventHandler ButtonFirstFormClicked;

и вызвать это событие в обработчике события Button.Click

void button_Clicked(object sender, EventArgs e)
{

    // if you're working with c# 6.0 or greater
    ButtonFirstFormClicked?.Invoke(sender, e);

    // if you're not then comment the above method and uncomment the below
    //if (ButtonFirstFormClicked!= null)
    //     ButtonFirstFormClicked(sender, e);
}  

2) Во второй форме (form2) подписаться на событие

form1.ButtonFirstFormClicked += (s, e)
{
 // put your code here...
} 

Удачи!

2 голосов
/ 06 ноября 2010

Вы можете использовать внутренний в качестве модификатора, чтобы вы могли легко получить доступ к событию щелчка.

например, у вас есть событие click в форме form1. вместо того, чтобы делать это частным, публичным или защищенным. так сказать, как внутренний Вы можете легко получить доступ к методу в других классах. Но внутренний модификатор доступен только в данный пакет.

Form1

internal passobj;
internal passeargs;

internal void button1_Click(object obj, EventArgs e)
{
 this.passobj = obj;
 this.passeargs = e;

 MessageBox.Show("Clicked!")
}

Form2

private void button1_Click(object obj, EventArgs e)
{

   Form1 f1 = new Form1();
   f1.button1_Click(f1.passobj, f1.passeargs);
}
1 голос
/ 06 ноября 2010
  1. Вы можете сделать элемент управления общедоступным, изменив псевдо-свойство «Модификаторы» в конструкторе форм.

  2. Как только кнопка станет открытой, вы сможете запуститьего Click событие путем вызова метода PerformClick, например form1.button1.PerformClick().Вам не нужно вызывать обработчик событий напрямую.

Однако лучше создать публичный метод, как предлагает Дастин Лэйн.

1 голос
/ 06 ноября 2010

В форме, где код (firstForm), вам нужно будет сделать процедуру общедоступной и доступной для вторичной формы, где находится дополнительная кнопка (btnMyButton).Выполнив это, вы можете подключить обработчик событий щелчка дополнительной кнопки к коду в 1-й форме следующим образом.

Вторично, как указано выше в Дастин , вы можете выбрать перемещениеэтот код в отдельный класс, а затем просто ссылается на обработчик метода с таким количеством событий, сколько вам нужно.

В любом случае будет работать, но я согласен, что если вы хотите следовать хорошему дизайну, у вас должно быть разделение интересов, какэто относится к бизнес-логике (код) и уровню представления (то есть формы с кнопками)

// кнопка во 2-й форме

btnMyButton.Click += new EventHandler(firstForm.MethodThatHasCodeToRun);

Надеюсь, это поможет,

Наслаждайтесь!

...