Member 10570811 Ответов: 1

C# передача и обратный вызов данных между формами


я пытаюсь передать данные и вам перезвонят из Form2 в form1 и текстовое поле формы form1 на Form2 текстовые поля.
этот приведенный ниже код работает нормально, но когда я перешел на f2.Show(); данные не могли быть переданы.
но f2.ShowDialog() работает отлично.

большое спасибо.

Что я уже пробовал:

кода form1
public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    private void btnSend_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();

        //Step 1) 
        //Display the form passing parameter(s) via overloading 
        //the ShowDialog() method. 
        //In this example the parameter is the 'txtBoxForm1' on Form1.
        // f2.ShowDialog(); is replaced by
        f2.ShowDialog(ref txtBoxForm1); 

    }
}



формы Form2
ublic partial class Form2 : Form
{

    public Form2()
    {
        InitializeComponent();
    }

    private void btnReturn_Click(object sender, EventArgs e)
    {
        this.Close(); 
    }

    //Step 2)
    //Receiving and returning parameter(s) via the overloaded ShowDialog() method.
    //This saves the need to have Properties and or fields associated
    //to parameters when overloading the above Form() constructor instead.
    public void ShowDialog(ref TextBox txtBoxForm1)
    {
        //Assign received parameter(s) to local context
        txtBoxForm2.Text = txtBoxForm1.Text;

        this.ShowDialog(); //Display and activate this form (Form2)

        //Return parameter(s)
        txtBoxForm1.Text = txtBoxForm2.Text;
    }
}

1 Ответов

Рейтинг:
1

OriginalGriff

Пожалуйста, не делай этого! Вместо этого используйте события - вот как остальная часть .NET делает такие вещи, в конце концов. Как именно, зависит от "отношения" между этими двумя формами.
Взгляните на них, один из них будет соответствовать вашим обстоятельствам.
Форма, которая создает экземпляр другого:

MyForm mf = new MyForm();
mf.Show();
Это "родитель", другая форма - "Ребенок".
(Это не подразумевает никаких формальных отношений MDI)

Передача информации между двумя формами, Часть 1: Родитель-Ребенок[^]
Передача информации между двумя формами, Часть 2: Ребенок-Родитель[^]
Передача информации между двумя формами, Часть 3: Ребенок ребенку[^]

Но... помните, что ShowDialog создает модальную форму - это означает, что поток, вызывающий ShowDialog, не возвращается из вызова до тех пор, пока новая форма не будет закрыта, - поэтому абсолютно ничего, что вы пытаетесь сделать с ней, не произойдет, пока это не произойдет. Это сделано специально и предназначено для таких вещей, как Открытие и сохранение диалогов - используйте метод Show для всего остального.


Member 10570811

большое спасибо,я пытаюсь также mdi родитель ребенку.но я не мог решить эту проблему.
я хочу попробовать передать данные из form2 в form1, хочу ли я использовать Show(); вместо ShowDialog();