如何将值从一种形式传递到另一种形式?

时间:2009-05-04 05:59:41

标签: c# winforms

考虑我有两种窗体形式的情况,比如F1F2。使用F1后,我现在调用了F2.ShowDialog()。这也将F2放在屏幕上。现在两个表单都可见,我如何将数据从F1传递到F2?此外,一旦F2(模态对话框)完成,我该如何将数据返回到F1

10 个答案:

答案 0 :(得分:3)

是否有人考虑过将值传递给tag属性中的表单。

Form newForm = new form();
newForm.Tag = passValue;
newform.showmodal();

当显示newform时,加载(或任何其他)例程可以使用标记

中的数据
public void load()
{
  if (this.Tag.length > 0)
  {
     // do something with the data
  }
}

答案 1 :(得分:2)

将此代码添加到f1。

中的相关位置
Form f2 = new Form();
f2.ShowDialog();

HTH

答案 2 :(得分:2)

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

这是以传递值的形式写的。要重新接收此值,您必须在接收的表单中创建新的构造函数

那将是那样的

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

并且当你从form2创建实例时会在第一个表单中注意到你有两个选择,其中一个让你传递值

答案 3 :(得分: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. 显示表单
  4. 当您以模态方式显示表单时,它将阻止调用表单中的代码,直到新表单关闭为止,因此您无法在那里使用简单的方式将信息传输到新表单(这是可能的,但是不必要地复杂化。)

    [编辑:将Form2中的属性方法扩展为更清晰]

答案 4 :(得分:0)

如果您只想将数据推送到子对话框,请考虑将参数添加到子对话框的构造函数,然后调用ShowDialog()。但是,以另一种方式传递数据有点棘手。

答案 5 :(得分:0)

让我重新构思这个问题 我有2个表格f1,f2 ...... 我叫 表格f2 = new Form(); f2.ShowDialog();

//现在我需要将参数从f1窗口传递给f2(这是模态对话框)也将值从f2格式返回到f1

//现在使用共同命名空间中的变量(对于f1,f2)

答案 6 :(得分:0)

考虑使用MVC模式,即不是在表单中包含太多数据并传递它们,而是使用保持这些东西的模型类。

答案 7 :(得分:0)

使用定义的Type作为您的信息(class,struct ...)并在Form1中声明一个变量

struct myData
{
    String str1;
    String str2;
}

Public Class Form1
{
  Public myData dat;
}

(注意:类型不应该是公开的,这只是为了这个例子) 因此,数据位于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的两个实例都将引用一个位置的数据。对表格的两个实例都可以进行更改/更新。

答案 8 :(得分:0)

可能是我迟到了。但是所有可能想要的人。

在目标表单中有一个像这样定义的构造函数

public partial class Destination: Form
{
    string valueAccepted;
    public Destination(string _valuePassed)
    {
        InitializeComponent();
        this.valueAccepted= _valuePassed;
    }
}

并在Source Form中调用这样的表单

        Source sourceForm= new Source ("value Passed");
        sourceForm.ShowDialog();

这种方式“值传递”从表单源传递到表单目的地

答案 9 :(得分:-1)

有两种方法可以在两种表单之间传递数据 查看这些包含示例视频的链接

-FormToForm使用属性 - http://windowsclient.net/learn/video.aspx?v=108089