C# 在WinC窗体中从以前的窗体获取值
我有两个表单,由大约20个文本框组成,我想保存所有20个条目,并在第三个表单中全部显示,每个表单都以不同的标签显示,我已经将所有20个数据保存在单个公共静态stringglobal变量中,但拥有20个静态全局变量会占用大量内存并降低程序运行速度,是否有其他方法保存这些数据并将其单独存储在标签中 以下是我尝试过的: 第一种形式:C# 在WinC窗体中从以前的窗体获取值,c#,winforms,public,C#,Winforms,Public,我有两个表单,由大约20个文本框组成,我想保存所有20个条目,并在第三个表单中全部显示,每个表单都以不同的标签显示,我已经将所有20个数据保存在单个公共静态stringglobal变量中,但拥有20个静态全局变量会占用大量内存并降低程序运行速度,是否有其他方法保存这些数据并将其单独存储在标签中 以下是我尝试过的: 第一种形式: public static string place_of_application; public static string gender; private void
public static string place_of_application;
public static string gender;
private void bunifuFlatButton1_Click(object sender, EventArgs e)
{
place_of_application = PlaceOfApplication.Text;
gender = identity.Text;
...
}
第二种形式:
private void PrintTemplateForm_Load(object sender, EventArgs e)
{
label36.Text = userform2.place_of_birth;
label34.Text = userform2.gender;
...
}
感谢您的帮助一种方法是在Visual Studio的第一个窗体和属性窗口中选择所有文本框,我猜您使用此IDE转到Modifiers属性并从列表中选择Public 或者,您可以直接编辑Form1.Designer.cs文件并将所有您想要的文本框从Private更改为Public,然后您可以直接从第二个表单访问它们,如下所示: Form1 frm=新Form1; frm.ShowDialog; 如果frm.DialogResult==DialogResult.OK label1.Text=frm.textBox1.Text;
假设你有两种形式,主要形式和次要形式。在main中有一堆文本框,单击一个按钮,您希望从这些文本框中获取数据,并将其显示在表单2中 首先,我将定义一个类,该类表示要发送/接收的数据。这似乎是某种个人数据,所以让我们创建一个Person类: 显然,您将在类中拥有所有您想要的20个属性,而不仅仅是这两个 现在的想法是从文本框中抓取数据并保存在该对象的实例中。接下来,在要启动的第二个表单中,让我们在构造函数中传递Person对象。因此,第二个表单后面的代码如下所示。我们将把那个人的信息保存在表单2中,然后显示在它的标签上
public partial class SecondForm : Form
{
public Person Person { get; set; }
public SecondForm(Person person)
{
InitializeComponent();
Person = person;
}
private void SecondForm_Load(object sender, EventArgs e)
{
lblName.Text = Person.Name;
lblAge.Text = Person.Age.ToString();
}
}
现在在主窗体中,当单击按钮时,我们将把数据保存到Person类的实例中,然后将其传递到SecondForm的构造函数中,然后显示它
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var person = new Person();
person.Name = txtName.Text;
if (int.TryParse(txtAge.Text, out int age))
{
person.Age = age;
}
var form2 = new SecondForm(person);
form2.Show();
}
}
我想你有。您要求的是一个非常具体的问题,而您的问题对于应用程序的体系结构来说要普遍得多
推荐
尝试利用C的面向对象特性,构建一个数据模型,即包含所有数据的类。然后您可以传递这个类,或者实际上是从一个表单到另一个表单的类引用。每个表单将负责从数据模型填充自己的文本框,或从文本框生成数据模型的新实例
作为一个额外的好处,您可以使用数据绑定来自动化数据模型和UI(即文本框)之间的同步
我强烈建议您阅读一本关于windows编程的书,或者查找带有示例的在线资源。[SO]不是学习如何正确构建windows应用程序的好地方
范例
数据模型是保存数据的类
public class PersonalInformation
{
public string PlaceOfApplication { get; set; }
public string Gender { get; set; }
// .. more here
}
主窗体可以通过PersonalInformation对象接收或发送数据
在第二种形式中,创建一个方法来接收数据
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public void SetPersonalInformation(PersonalInformation value)
{
placeOfApplictionLabel.Text = value.PlaceOfApplication;
genderLabel.Text = value.Gender;
}
}
在第一个表单中,通过准备信息并将信息发送到第二个表单来处理按钮按下
public partial class Form1 : Form
{
...
private void secondFormButton_Click(object sender, EventArgs e)
{
var dlg = new Form2();
dlg.SetPersonalInformation(this.PersonalInformation);
if (dlg.ShowDialog(this) == DialogResult.OK)
{
// user pressed OK in second form
}
}
}
测试过程
拥有20个静态全局变量会占用大量内存并降低程序的运行速度。20个字符串不可能对程序的性能产生任何可测量的影响。当然,您可以在FormClosing事件处理程序中这样做。存储20个全局变量不会降低程序的运行速度,但我同意这是不雅观的。您可以使用具有20个属性的类。或者,如果20个文本框在逻辑上相似,请使用数组/列表。请咨询。另外,“拥有20个静态全局变量”是非常不寻常的,您可能做错了什么。发布你的代码。你需要显示你的代码。我们一事无成。只需注意,只有在表单仍然打开的情况下,此操作才有效。。
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public void SetPersonalInformation(PersonalInformation value)
{
placeOfApplictionLabel.Text = value.PlaceOfApplication;
genderLabel.Text = value.Gender;
}
}
public partial class Form1 : Form
{
...
private void secondFormButton_Click(object sender, EventArgs e)
{
var dlg = new Form2();
dlg.SetPersonalInformation(this.PersonalInformation);
if (dlg.ShowDialog(this) == DialogResult.OK)
{
// user pressed OK in second form
}
}
}