передать что-то из дочерней формы в родительский - PullRequest
0 голосов
/ 02 июня 2010

, поэтому у меня есть эта форма, и на ней есть поле со списком, заполненное из базы данных с помощью метода SQL.

и у меня есть другая форма, которая позволяет нам поддерживать таблицу базы данных и т. Д.

поэтому я создаю новый экземпляр второй формы, выполняя:

Form1 frm = new Form2;
frm.show();

Как только я сделал то, что хотел сделать во второй форме, и закрыл его, мне нужно каким-то образом вызвать событие или что-то, что обновит поле со списком и код за ним.

Я думал о каком-либо событии onchange или focus для всей формы, проблема в том, что у меня есть 5 из этих комбинированных окон и я снова запускаю весь SQL.

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

любые идеалы были бы потрясающими

Ответы [ 6 ]

1 голос
/ 02 июня 2010

Здесь вы можете использовать делегат и событие.

Ваш родительский класс создаст объект дочернего класса и также подпишется на событие, если дочерний класс.

Всякий раз, когда необходимо передать дочерний классчто-то / сигнализирует родительский класс, это вызовет событие.Поскольку родитель подписался на это событие, он получит эти данные и выполнит необходимую операцию.

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

1 голос
/ 02 июня 2010

Если вы присвоили эти формы первой форме, владеющей второй, например:

Form2 frm2 = new Form2();
//assuming that you're launching this form from within the first form
frm2.Owner = this;

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

Form2_FormClosed(object o, FormClosedEventArgs e)
{
    this.Owner.updateComboBox();
}

Обратите внимание, что вам понадобится событие FormClosing, если вы хотите отправить данные из элементов управления формы обратно.

Обратите внимание, что свойство Owner имеет некоторые другие специальные характеристики. Примечательно, что дочерняя форма будет отображаться (сверху) при выборе родительской формы.

1 голос
/ 02 июня 2010

Я думаю, что вы ответили на вопрос ... Используйте событие / обработчик для обновления.

* 1003 Е.Г. *

public class Form2 : Form
{
    public event EventHandler DbChanged;

    protected virtual void OnDbChanged()
    {
        ... // Raise event
    }

    // On OK button/FormClosing/Closed whatever, be sure to call OnDbChanging
}

Тогда в вашем коде Form1

var form2 = new Form2();
form2.DbChanged += new EventHandler(Form2_DbChanged); // Add method to handle change and update the appropriate combo box
form2.Show();
0 голосов
/ 02 июня 2010

Предположим, ваше имя комбо идентификатора cmb1 и

cmb1.DataSource = ds1;

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

из родительского окна, вызовите окно chlid следующим образом:

if (NameOfWindow.RequestAction(ref ds1)) // let RequestAction is a method
{
       ///refresh your data source of combo                    
}

и в дочернем окне метод должен быть таким:

public static bool RequestAction(ref ds1)
        {
            NameOfWindow frm = new NameOfWindow();
            if (frm.ShowDialog() == DialogResult.OK)
            {
                //do what ever you want to do and update the ds1               
                return true;
            }
            else
            {
                return false;
            }                     

        }
0 голосов
/ 02 июня 2010

Множество опций, но простой - передать основную форму как ссылку на вторую форму.

Form2 frm = new Form2( this ); 
frm.Show();

Затем, когда Form2 заканчивает свою работу, он может вызвать какой-либо метод в главной форме для обновления

public class Form2 : Form 
{
    public Form2( Form1 form1 )
    { 
        this.form1 = form1;
    }

    /// ...
    public void Work()
    {
        // ...
        form1.Update( someData );
    }
}

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

0 голосов
/ 02 июня 2010

Формы - это классы. Как и любой другой класс, они могут иметь свойства и события.

Ваш Form2 может предоставить событие «DatabaseChanged». Form1 или любая другая форма, которая заботится, может подписаться на это событие. При изменении базы данных Form2 может вызвать это событие, Form1 увидит его и обновит поле со списком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...