Запуск метода в форме 1 по нажатию кнопки на форме 2 - PullRequest
3 голосов
/ 28 мая 2009

Я совершенно новичок в окнах форм. Я хотел бы знать, возможно ли запустить метод в форме 1 по нажатию кнопки в форме 2? Моя форма 1 имеет выпадающий список. Моя форма 2 имеет кнопку Сохранить. Чего я хотел бы достичь: Когда пользователь нажимает Сохранить в форме 2, мне нужно проверить, открыта ли форма 1. Если он открыт, я хочу получить экземпляр и вызвать метод, который бы заполнил комбо в форме 1.

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

Спасибо:)

Добавлено: И форма 1, и форма 2 не зависят друг от друга и могут быть открыты пользователем в любом порядке.

Ответы [ 3 ]

2 голосов
/ 28 мая 2009

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

Пример:

foreach (Form form in Application.OpenForms)
{
    if (form.GetType() == typeof(Form1))
    {
        ((Form1)form).Close();
    }
}

Этот код будет вызывать YourMethod во всех открытых экземплярах Form1.

(отредактировал образец кода для совместимости с 2.0)

0 голосов
/ 28 мая 2009

Что вы можете сделать, это создать статическое событие в другом классе, а затем получить форму 1 для подписки на событие. Затем, когда кнопка нажата в форме 2, вызовите событие для формы 1, чтобы продолжить.

Вы можете объявить событие в Форме 1, если хотите.

public class Form1 : Form
{
    public static event EventHandler MyEvent;

    public Form1()
    {
        Form1.MyEvent += new EventHandler(MyEventMethod);
    }

    private void MyEventMethod(object sender, EventArgs e)
    {
        //do something here
    }

    public static void OnMyEvent(Form frm)
    {
        if (MyEvent != null)
            MyEvent(frm, new EventArgs());

    }
}

public class Form2 : Form
{
    private void SaveButton(object sender, EventArgs e)
    {
        Form1.OnMyEvent(this); 
    }
}
0 голосов
/ 28 мая 2009

Конечно, это возможно, все, что вам нужно, это ссылка на Form1 и открытый метод этого класса.

Мое предложение - передать ссылку Form1 в конструктор Form2.

...