我有2种形式,由大约20个文本框组成,我想保存所有20个条目并以第3种形式显示它们,每一个都以不同的标签显示,我已经将所有20个数据保存在单独的public static string
中全局变量,但是拥有20个static
全局变量会占用大量内存并减慢程序速度,是否还有其他方法可以保存这些数据并将它们分别存储在标签中?
这是我尝试过的:
第一种形式:
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;
...
}
感谢您的帮助
答案 0 :(得分:0)
假设您有两种形式,主要形式和次要形式。您的主体中有一堆文本框,然后单击一个按钮,您要从中获取数据并以表格2进行显示。
首先,我将定义一个表示要发送/接收的数据的类。这似乎是某种个人数据,所以让我们创建一个Person
类:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
很显然,您将拥有所有想要的20种东西作为类的属性,而不仅仅是这两种。
现在的想法是从文本框中获取数据并保存在该对象的实例中。接下来,在您要启动的第二种形式中,让我们在构造函数中传递一个Person
对象。因此,第二种形式的代码如下所示。我们将把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
的构造函数中,然后显示它。 / p>
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();
}
}
答案 1 :(得分:-1)
一种方法可能是选择第一个表单中的所有文本框,然后在Visual Studio的“属性”窗口中(我猜您使用的是IDE)转到“修饰符”属性,然后从列表中选择“公共”,
或者您可以直接编辑Form1.Designer.cs文件并将所需的所有文本框从“私人”更改为“公共”,然后可以从第二个表单直接访问它们,如下所示:
Form1 frm = new Form1();
frm.ShowDialog();
if (frm.DialogResult == DialogResult.OK)
label1.Text = frm.textBox1.Text;
答案 2 :(得分:-1)
我认为您有the XY problem。当您的问题在应用程序的体系结构中更加普遍时,您正在询问一个非常具体的问题。
推荐
尝试利用C#
的面向对象功能并建立数据模型(即包含所有数据的类)。然后,您可以将此类(或实际上是对该类的引用)从一种形式传递到另一种形式。每个表单将负责根据数据模型填充自己的文本框,或根据文本框生成数据模型的新实例。
此设置的一个额外好处是,您可以使用数据绑定来自动执行数据模型和UI(即文本框)之间的同步。
我强烈建议您阅读有关Windows编程的书,或查找带有示例的在线资源。 [SO]不是学习如何正确构建Windows应用程序的好地方。
示例
数据模型是保存数据的类
public class PersonalInformation
{
public string PlaceOfApplication { get; set; }
public string Gender { get; set; }
// .. more here
}
主表单可以通过PersonalInformation
对象接收或发送数据。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public PersonalInformation PersonalInformation
{
get
{
return new PersonalInformation()
{
PlaceOfApplication = placeOfApplicationTextBox.Text,
Gender = genderTextBox.Text
};
}
set
{
placeOfApplicationTextBox.Text = value.PlaceOfApplication;
genderTextBox.Text = value.Gender;
}
}
}
在第二种形式中,创建一种接收数据的方法
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
}
}
}
测试过程