C#通过表单传递数据

时间:2014-08-16 10:51:31

标签: c# winforms

试图找到解决这个问题的方法,但找不到工作方法,所以我决定自己提问。

我在Form2.cs中有一个名为“ipaddress_2”的文本框,在Form1.cs中有一个名为“ipaddress”的文本框。

这是我用来启动Form2.cs的代码。

    private void rtmTool_Load(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.ShowDialog();
    }

我想将数据从Form2.cs框导入到Forms1.cs ip框中,所以当用户关闭form2.cs时,form1将填入(form2)ip。<​​/ p>

如果您需要/想要查看,这是form1.cs的链接。 http://www.mediafire.com/download/3f5726axo7w6o92/Source.txt

问候。

4 个答案:

答案 0 :(得分:0)

当f2关闭时,控制将返回到调用ShowDialog的函数。

f2仍然可以使用,因此只要控件被声明为public,您就可以直接访问它们:

private void rtmTool_Load(object sender, EventArgs e)
{
    Form2 f2 = new Form2();
    f2.ShowDialog();
    ipAddress.Text = f2.ip_address2.Text;
}

答案 1 :(得分:0)

默认情况下,在Form2.Designer.cs文件中,ipaddress_2被声明为private。将访问说明符更改为public

然后从Form1.cs开始,您可以访问Form2.cs - ipaddress_2控件,如下所示。

private void rtmTool_Load(object sender, EventArgs e)
{
    Form2 f2 = new Form2();
    f2.ShowDialog();
    ipAddress.Text = f2.ip_address2.Text; // After the Form2.cs has been closed, the ipaddress from Form2.cs has been accessed and displayed in Form1.cs - ipaddress Textbox.
}

答案 2 :(得分:0)

只是为了添加其他两个答案,我的观点是控件不应该公开,除非你有一个非常有效的理由......在这种情况下我通常更喜欢保持我的控件私有添加属性仅读取控件。请参阅下面的示例

表格1

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        using(var form = new Form2())
        {
            form.ShowDialog();
            ipAddess.Text = form.IpAddress;
        }
    }
}

表格2

public partial class Form2 : Form
{
    public string IpAddress
    {
        get
        {
            return ip_address.Text;
        }
    }
}

答案 3 :(得分:0)

我建议创建一个对象来保存要在表单上显示的任何数据,并将此对象从第一个表单传递给第二个表单。然后,该对象可以绑定到两个表单的控件,并将其数据传播到两个表单。

示例对象

    public class IPSettings:INotifyPropertyChanged
{
    private string ipAddress;

    public string IPAddress
    {
        get
        {
            return this.ipAddress;
        }
        set
        {
            this.ipAddress = value;
            OnPropertyChanged("IPAddress");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = this.PropertyChanged;
        if(handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

表格1

    public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        ipSettings = new IPSettings();
        textBoxIpAddress1.DataBindings.Add("Text", ipSettings, "IPAddress");
    }

    private IPSettings ipSettings;

    private void buttonOpenDialog_Click(object sender, EventArgs e)
    {
        new Form2(ipSettings).ShowDialog();
    }
}

表格2

    public partial class Form2 : Form
{
    public Form2(IPSettings ipSettings)
    {
        InitializeComponent();
        textBoxIpAddress2.DataBindings.Add("Text", ipSettings, "IPAddress",false,DataSourceUpdateMode.OnPropertyChanged);
    }
}