c#通过表单传递数据

本文关键字:数据 表单 | 更新日期: 2023-09-27 18:18:20

试图找到解决这个问题的方法,但找不到有效的方法,所以我决定自己问一下。

我有一个文本框在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已经填写。

这是form .cs的链接,如果你需要/想看一下。http://www.mediafire.com/download/3f5726axo7w6o92/Source.txt

问候。

c#通过表单传递数据

默认情况下,在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.
}

当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

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;
        }
    }
}

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

样本对象

    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);
    }
}