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
问候。
默认情况下,在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 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);
}
}