在表单之间使用列表

本文关键字:列表 之间 表单 | 更新日期: 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>