在表单之间使用列表
本文关键字:列表 之间 表单 | 更新日期: 2023-09-27 18:10:50
我在form1上生成了一个列表,其内容是数字和一个字母,格式为K000-000。然后我想打开form2。在表单2我有一个文本框,一个列表框和一个按钮。在文本框中,你可以输入更多的数字,比如12345。当您单击按钮时,我希望它添加form1列表的内容,末尾有"-"和您在Form2的文本框中键入的内容。所以列表框将是K000-000-12345。我不确定如何正确使用Form1的Form2列表,也添加到它。
Form1
DesignNo.FindByItem(electype, (int.Parse)(dwgno));
List<DesignNo> Electrode = DesignNo.FindByItem(electype, (int.Parse)(dwgno));
if (Electrode.Count <= 0)
{
MessageBox.Show("Unknown Electrode Number");
}
frmElectrode frmelec = new frmElectrode();
frmelec.Show();
1-使用静态属性
public static List<int> list;
public Form1()
{
list=new List<int>();
InitializeComponent();
}
在Form2访问列表中像这样
Form1.list.Add(item);
二元构造函数
public static List<int> list;
public Form1()
{
list=new List<int>();
InitializeComponent();
}
public void ShowForm2()
{
var form2=new Form2(List);
form2.show();
}
in Form2
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public static List<int> _list;
public Form2(List<int> list)
{
_list=list;
InitializeComponent();
}
}
在Form 2中创建一个公共属性
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public string Content { get; private set; }
public void ButtonOkOnClick()
{
this.Content = this.textBox1.Text;
this.Close();
}
}
在Form2关闭后消费Form1中的公共属性
public Form1()
{
InitializeComponent();
Form2 form2 = new Form2();
form2.Show();
form2.Closed += (sender, args) => this.list.Add(form.Content);
}
这样依赖关系是正确的方向,form2只是一个输入表单,可以在没有任何依赖关系的情况下重用。
一种干净的方式来共享一些状态(在你的例子中是键的字典)是通过一些共享服务(单例),所以:
您可以创建一个类(例如ElectrodeManager
),它将保存电极字典(首先为空)。
在Form1中,您将通过该类上的指定方法填充该字典(例如AddElectrode(string electrodeType, string electrodeKey)
->,它将向字典中添加新项)——所以你会Dictionary<string, string>
,例如{"T1"、"k000 - 000"},{"T2"、"k000 - 0001"}…
在Form2中,您将从ElectrodeManager
中工作字典,并将文本框中的字符串附加到电极的键上。
的例子:
public class ElectrodeManager
{
#region Singleton Pattern
private static ElectrodeManager instance;
public static ElectrodeManager Instance
{
get
{
if (instance == null)
instance = new ElectrodeManager();
return instance;
}
}
private ElectrodeManager()
{
electrodes = new Dictionary<string, string>();
}
#endregion
#region Fields
private Dictionary<string, string> electrodes;
#endregion Fields
#region Methods
public void AddElectrode(string eType, string eKey)
{
if (!electrodes.ContainsKey(eType))
{
electrodes.Add(eType, eKey);
}
}
public void AppendStringToElectrodeKey(string eType, string keyAddendum)
{
string electrodeKey = String.Empty;
if (electrodes.TryGetValue(eType, out electrodeKey))
{
electrodes[eType] = String.Format("{0}-{1}", electrodes[eType], keyAddendum);
}
}
public IDictionary<string, string> GetElectrodes()
{
return electrodes;
}
#endregion Methods
}
在Form1中的用法(在生成逻辑中的某处):
ElectrodeManager.Instance.AddElectrode("T1", "K000-000");
ElectrodeManager.Instance.AddElectrode("T2", "K000-001");
内部Form2(点击按钮):
ElectrodeManager.Instance.AppendStringToElectrodeKey("T1", textBox.Text);
ElectrodeManager.Instance.AppendStringToElectrodeKey("T2", textBox.Text);
当然,如果更适合您的话,您可以轻松地将数据类型切换为List<string>
。