F1
和 F2
。在使用完 F1
后,我现在调用了 F2.ShowDialog()
。这会将 F2
也显示在屏幕上。现在,既然两个窗体都可见,我如何将数据从 F1
传递给 F2
?此外,一旦模式对话框的 F2
完成,我如何将数据返回给 F1
?Form newForm = new form();
newForm.Tag = passValue;
newform.showmodal();
public void load()
{
if (this.Tag.length > 0)
{
// do something with the data
}
}
int x=10;
Form1 f2 = new Form1(x);
f2.ShowDialog();
这段文字是指以传递值的形式进行编写。要接收此值,您必须在接收到的表单中创建新的构造函数
构造函数应该如下所示:
public Form2(int x)
{
InitializeComponent();
this.x = x;
}
当您从form2创建实例时,第一个表单中将会被通知,并且您有两个选择之一,其中一个选择允许您传递值。
Form f2 = new Form();
f2.ShowDialog();
HTH
private void ShowForm2()
{
string value = TheTextBox.Text;
Form2 newForm = new Form2();
newForm.TheValue = value;
newForm.ShowDialog();
}
在Form2中:
private string _theValue;
public string TheValue
{
get
{
return _theValue;
}
set
{
_theValue = value;
// do something with _theValue so that it
// appears in the UI
}
}
这是一种非常简单的方法,对于更大的应用程序可能不是最佳选择(在这种情况下,您需要研究MVC模式或类似模式)。关键点是按以下顺序执行操作:
当以模态方式显示表单时,它将阻止调用表单中的代码,直到关闭新表单,因此您不能在那里编写代码以简单地将信息传输到新表单(虽然这是可能的,但过于复杂)。
[编辑:扩展了Form2中的属性方法以更清晰明了]
struct myData
{
String str1;
String str2;
}
Public Class Form1
{
Public myData dat;
}
public Form2(Form1 frm1)
{
mFrm1 = frm1;
InitializeComponent();
}
Form2 frm2 = new Form2(this);
frm2.ShowDialog();
现在,当执行到Form2时,您可以访问Form1中的MyData:
mFrm1.dat;
通过这种方式,Form1和Form2的两个实例将引用一个地方的数据。对表单的更改/更新将对两个实例都可用。
也许我来晚了,但是所有可能需要的人。
在目标形式中,有一个像这样定义的构造函数
public partial class Destination: Form
{
string valueAccepted;
public Destination(string _valuePassed)
{
InitializeComponent();
this.valueAccepted= _valuePassed;
}
}
在源代码中这样调用表单
Source sourceForm= new Source ("value Passed");
sourceForm.ShowDialog();
这样,“value Passed”从表单源传递到表单目的地
如果您只想将数据推送到子对话框,请考虑向子对话框的构造函数添加参数,然后调用ShowDialog()。然而,反向传递数据则有点棘手。
让我重新阐述问题。我有两个窗体f1和f2...
我调用了以下代码:
Form f2 = new Form(); f2.ShowDialog();
//现在我需要将f1窗口中的参数传递到f2(模态对话框),并从f2窗体返回值到f1。
//目前我使用的是公共命名空间中的变量(对于f1和f2都是如此)。
考虑使用MVC模式,即不要在表单中拥有过多的数据并传递它们,而是使用模型类来保持这些内容。
有多种方法可以在两个表单之间传递数据,请查看以下链接,其中包含执行此操作的示例视频
-使用属性的表单到表单 - http://windowsclient.net/learn/video.aspx?v=108089