如何将一个表单中的值传递到另一个表单?

7
考虑这种情况,我有两个窗体,分别为 F1F2。在使用完 F1 后,我现在调用了 F2.ShowDialog()。这会将 F2 也显示在屏幕上。现在,既然两个窗体都可见,我如何将数据从 F1 传递给 F2?此外,一旦模式对话框的 F2 完成,我如何将数据返回给 F1

+1 - 我不明白为什么这个问题被踩了...它可能措辞不当,但并不是一个坏问题。Arunachalam(或者有适当权限的人)应该重新措辞这个问题,使其更易理解。 - Mark Carpenter
10个回答

3
有没有人考虑过直接将值传递到标签属性中的表单中呢?
Form newForm = new form();
newForm.Tag = passValue;
newform.showmodal();

当 newform 被展示时,加载(或其他)程序可以使用标签中的数据。
public void load()
{
  if (this.Tag.length > 0)
  {
     // do something with the data
  }
}

3
int x=10;
Form1 f2 = new Form1(x);
f2.ShowDialog();

这段文字是指以传递值的形式进行编写。要接收此值,您必须在接收到的表单中创建新的构造函数

构造函数应该如下所示:

public Form2(int x)
  {
        InitializeComponent();
        this.x = x;
 }

当您从form2创建实例时,第一个表单中将会被通知,并且您有两个选择之一,其中一个选择允许您传递值。


2
在表单f1的相关位置添加以下代码。
Form f2 = new Form();
f2.ShowDialog();

HTH


1
假设您在Form1中有一个TextBox控件,并且希望将其值传递到Form2并以模态方式显示Form2。
在Form1中:
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模式或类似模式)。关键点是按以下顺序执行操作:

  1. 创建要显示的表单实例
  2. 将数据传输到新的表单实例
  3. 显示表单

当以模态方式显示表单时,它将阻止调用表单中的代码,直到关闭新表单,因此您不能在那里编写代码以简单地将信息传输到新表单(虽然这是可能的,但过于复杂)。

[编辑:扩展了Form2中的属性方法以更清晰明了]


0
使用一个已定义的类型来存储你的信息(类、结构体等),并在 Form1 中声明该变量。
struct myData
{
    String str1;
    String str2;
}

Public Class Form1
{
  Public myData dat;
}

(注:类型实际上不应该是public,这只是为了举例而已)因此,数据位于Form1中。修改Form2的构造函数,使其接受一个类型为Form1的参数
public Form2(Form1 frm1)
{
    mFrm1 = frm1;
    InitializeComponent();
}

现在,当您调用form2时,请发送正在进行调用的Form1的实例:
Form2 frm2 = new Form2(this);
frm2.ShowDialog();

现在,当执行到Form2时,您可以访问Form1中的MyData:
mFrm1.dat;

通过这种方式,Form1和Form2的两个实例将引用一个地方的数据。对表单的更改/更新将对两个实例都可用。


0

也许我来晚了,但是所有可能需要的人。

在目标形式中,有一个像这样定义的构造函数

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”从表单源传递到表单目的地


0

如果您只想将数据推送到子对话框,请考虑向子对话框的构造函数添加参数,然后调用ShowDialog()。然而,反向传递数据则有点棘手。


0

让我重新阐述问题。我有两个窗体f1和f2...

我调用了以下代码:

Form f2 = new Form(); f2.ShowDialog();

//现在我需要将f1窗口中的参数传递到f2(模态对话框),并从f2窗体返回值到f1。

//目前我使用的是公共命名空间中的变量(对于f1和f2都是如此)。


嗯...你没有重新表述得足够清晰易懂! - Cerebrus

0

考虑使用MVC模式,即不要在表单中拥有过多的数据并传递它们,而是使用模型类来保持这些内容。


-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接