Передача данных обратно в первую форму из второй формы и класса с использованием делегатов в C # - PullRequest
0 голосов
/ 20 января 2012

Из FormA я вызываю FormB, используя frmB.Show();

В FormB у меня есть два текстовых поля.Предположим, что пользователь вводит некоторые данные в эти два текстовых поля.Мне нужно добавить это в ListBox в FormA.

Для этого я создал экземпляр делегата и вызвал его в FormA после создания объекта frmB - который работает нормально.

В FormB,Создается объект Class1 и вызывается один из его методов, который также должен получить доступ к / обновить ListBox в FormA.

Я не могу создать экземпляр для Class1 в FormA, так как экземпляр Class1 создан в FormB.Я попытался назначить экземпляр делегата Class1 экземпляру FormB, но он не работает.

Как мне этого добиться?

1 Ответ

0 голосов
/ 20 января 2012

Я бы выставил событие в FormB, которое вы вызываете, когда вам нужно обновить FormA.Перед вызовом FormA formBInstance.Show() вы можете подключить делегат к обработчику событий для обработки того, что вам нужно сделать в FormA: formBInstance.UpdateEvent += myDelegateEventHandler.Поэтому, когда FormB необходимо обновить FormA, вы просто запускаете это событие, и делегат будет работать, как и ожидалось, под FormA.

Изменить, чтобы показать еще немного кода!

FormB.cs:

    // You can add more parameters to this to pass any data you need
    // in addition to the object sender you pass back
    public delegate void UpdateEventHandler(object sender, EventArgs e)

    public class FormB : Form
    {

        public event UpdateEventHandler Update;

        private void update()
        {
            // do your updates to formB here
            InvokeUpdateEvent(objectThatContainsUsefulData);
        }

        protected void InvokeUpdateEvent(object sender)
        {
            var handler = UpdateEvent;
            if (handler != null)
                handler(sender, null);
        }
    }

FormA.cs:

    public class FormA : Form
    {

        private void myUpdateDelegate(object sender, EventArgs e)
        {
            // Do your updates that formA will require here
        }

        public void methodCallingFormB()
        {
            // Do whatever you need to set up for creating form B
            var formB = new FormB();
            formB.UpdateEvent += myUpdateDelegate;
            formB.Show();
        }
    }

Я надеюсь, что все это имеет смысл для вас.Обратитесь к MSDN Events Tutorial для получения дополнительной помощи!

...