2011-05-17 70 views
18

可能重复:
How do you pass an object from form1 to form2 and back to form1?传递从对话形式的价值主要形式

我已经习惯了通过简单地将它们作为参数传递的窗口形式之间的变量。 现在我有一个已经打开的表单(我们称之为FormMain),另一个表单应该像对话框一样工作(FormTask)。直到他填写了关于FormTask的信息之后,用户才能与主表格互动。 FormTask只包含一个文本框,并且此文本框的值应返回到FormMain,并将其作为变量保持跟踪。 FormTask需要参数exerciseType。当FormTask打开时,它会检查此参数的值并相应地设置文本框的默认值。这已经起作用了,对于如何将我的字符串值返回到已经打开的MainForm,我只是一无所知。 这些对话框似乎只能返回DialogResults,这不是我所追求的。我也不是很有经验,我宁愿避免摸索做我自己的自定义对话框。

FormMain:

FormTask formTask = new FormTask(exerciseType); 
formOpgaveInvoker.ShowDialog(); 

FormTask:

private void button1_Click(object sender, EventArgs e) 
{ 
    string opgave = textBoxOpgave.Text; 
    // return string value to MainForm here 
} 
+0

因为键盘前面的每个人都已经有了张贴了一个答案,我不会尝试自己这样做。但请记住,您仍然应该检查由'ShowDialog'调用返回的'DialogResult'值。您希望允许用户*取消的情况*(即,关闭表单而不输入任何内容),并且不希望将他们在文本框中输入的内容视为实际输入。 – 2011-05-17 10:00:18

回答

28

在FormTask

public string Opgave { get {return textBoxOpgave.Text;}} 

创建公共财产和的ShowDialog后检查();

FormTask formTask = new FormTask(exerciseType); 
formOpgaveInvoer.ShowDialog(); 
formOpgaveInvoer.Opgave; // here it is 
+1

感谢您的回答,我现在感觉非常愚蠢:P – Jort 2011-05-17 10:04:26

+1

'FormTask'不会像这样处置。要么调用Dispose()或者(更好)使用'using'块。 – kdbanman 2015-10-13 23:13:16

+0

工程就像一个魅力。 – 2016-10-13 05:31:49

1

要做到这一点最简单的方法是一个公共属性添加到您的窗体类返回字符串。

private void button1_Click(object sender, EventArgs e) 
{ 
    opgave = textBoxOpgave.Text; 
} 

... 

FormTask formTask = new FormTask(exerciseType); 
formOpgaveInvoker.ShowDialog(); 
DoSomething(formTask.opgave); 
+3

或者,您可以简单地设置属性并返回'textBoxOpgave.Text'。节省大量不相关的代码行。当你用'ShowDialog'显示一个表单时,保证控件不会被丢弃,这样你就可以读取它们的值。这就是为什么你需要在'using'语句中包装这些表单的创建。 – 2011-05-17 10:02:02

1

表单只是正常上课:

public string opgave 
{ 
    get; 
    private set; 
} 

分配给该属性为您的对话框关闭,然后从所谓ShowDialog()代码读取属性。这意味着,您可以在其中创建属性。
所以:创建一个属性并为其赋值。

1

一个属性添加到FormTask例如String1

public string String1 {get; set;} 
button1_Click例如

设置String1中值,

您可以访问财产的MainForm像

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