C# 将值从对话框窗体传递到主窗体

C# 将值从对话框窗体传递到主窗体,c#,forms,dialog,C#,Forms,Dialog,可能重复: 我习惯于通过简单地将变量作为参数传递,在windows窗体之间传递变量。 现在我有了一个已经打开的表单(我们称之为FormMain),另一个表单应该像一个对话框(FormTask)。在填写FormTask上的信息之前,用户无法与主表单交互FormTask只包含一个文本框,此文本框的值应返回到FormMain,并作为变量跟踪FormTask需要一个参数exerciseType。当FormTask打开时,它会检查此参数的值,并相应地设置文本框的默认值。这已经起作用了,我只是不知道如何将

可能重复:

我习惯于通过简单地将变量作为参数传递,在windows窗体之间传递变量。 现在我有了一个已经打开的表单(我们称之为
FormMain
),另一个表单应该像一个对话框(
FormTask
)。在填写
FormTask
上的信息之前,用户无法与主表单交互
FormTask
只包含一个文本框,此文本框的值应返回到
FormMain
,并作为变量跟踪
FormTask
需要一个参数
exerciseType
。当
FormTask
打开时,它会检查此参数的值,并相应地设置文本框的默认值。这已经起作用了,我只是不知道如何将字符串值返回到已经打开的
MainForm
。 这些对话框似乎只能返回
对话框结果
,这不是我想要的。我也不是很有经验,我宁愿避免在制作自己的自定义对话框时笨手笨脚

FormMain:

FormTask formTask = new FormTask(exerciseType);
formOpgaveInvoker.ShowDialog();
private void button1_Click(object sender, EventArgs e)
{
    string opgave = textBoxOpgave.Text;
    // return string value to MainForm here
}
表单任务:

FormTask formTask = new FormTask(exerciseType);
formOpgaveInvoker.ShowDialog();
private void button1_Click(object sender, EventArgs e)
{
    string opgave = textBoxOpgave.Text;
    // return string value to MainForm here
}

最简单的方法是向表单类添加公共属性以返回字符串

public string opgave
{
    get;
    private set;
}
在对话框关闭时指定此属性,然后从名为
ShowDialog()
的代码中读取该属性:


表单只是普通的类。这意味着您可以在其中创建属性。

因此:创建一个属性并为其赋值。

在FormTask中创建公共属性

public string Opgave { get {return textBoxOpgave.Text;}}
并在ShowDialog()之后检查它


将属性添加到
FormTask
中,例如
String1
like

public string String1 {get; set;}
例如,在
按钮1中设置String1值

您可以在MainForm中访问该属性,如

FormTask formTask = new FormTask(exerciseType);   
formOpgaveInvoer.ShowDialog(); 
string str = formTask.String1;

因为在键盘前的每个人都已经贴出了答案,所以我自己不会这么做。但是请记住,您仍然应该检查调用
ShowDialog
返回的
DialogResult
值。您希望考虑用户取消的情况(即,关闭表单而不输入任何内容),并且您不希望将他们在文本框中输入的任何内容视为实际输入。或者,您可以简单地设置属性并返回
textboxopgived.Text
。保存大量不相关的代码行。当您使用
ShowDialog
显示表单时,保证不会释放控件,这样您就可以读取它们的值。这就是为什么您需要使用
语句将此类表单的创建封装在一个
语句中。感谢您的回答,我现在觉得自己非常愚蠢:P
FormTask
不会这样处理。调用
Dispose()
或者(更好的是)使用
块使用
。就像一个符咒。