如何在c#中创建全局列表

时间:2013-12-27 12:12:19

标签: c# visual-studio-2012 windows-forms-designer

我的项目中有三个窗体,我有一个对象类。如何列出可供所有三种表单使用的对象列表?

3 个答案:

答案 0 :(得分:5)

您可以创建一个包含对象实例的类:

public class MyClass
{

    public static List<string> MyList {get; set}
}

然后您可以从表单

访问它
MyClass.MyList = new List<string>();

显然,字符串将替换为对象的名称。

答案 1 :(得分:5)

  1. 更改访问修饰符 在Form2中为控件/字段public设置访问修饰符 Form1的任何地方。

    Form2 f = new Form2();
    f.ShowDialog();
    this.textBox1.Text = f.textBox1.Text;
    
    • 实施最快捷方便
    • 与OOP的所有基础知识相反
    • 仅传输较早版本的
    • 仅使用ShowDialog()显示表单f,即在第一个表单控件中仅返回第二个结束。通过维护第一种形式的第二种形式的链接来避免这种情况
  2. 使用公共财产/方法。该方法与第一种方法非常相似 在Form2中,类定义了一个属性(或方法)。

    在Form2类中定义属性(或方法)

    public string Data
    {
        get
        {
            return textBox1.Text;
        }
    }
    

    Form1中的任何地方

    Form2 f = new Form2();
    f.ShowDialog();
    this.textBox1.Text = f.Data;
    
    • 不与OOP的所有基本内容相矛盾
    • 相同
  3. 将数据传输到构造函数Form2。 更改构造函数Form2

    public Form2(string data)
    {
        InitializeComponent();
        this.data = data;
    }
    string data;
    

    并在Form1的任何位置创建一个形状,如下所示:

    Form2 f = new Form2(this.textBox1.Text);
    f.ShowDialog();
    
  4. 发送指向构造函数的链接。 更改构造函数Form2。

    public Form2(Form1 f1)
    {
        InitializeComponent();    
        string s = f1.textBox1.Text;
    }
    

    在Form1的任何位置创建一个形状,以便传递对第一个表单的引用

    Form2 f = new Form2(this);
    f.ShowDialog();
    
    • 访问第一个表单的所有打开字段/功能
    • 可以双向进行数据传输
    • 违反PLO
  5. 使用属性“parent”。 创建第二个表单时设置所有者

    Form2 f = new Form2();
    f.Owner = this;
    f.ShowDialog();
    

    在第二个中,我们确定所有者

    Form1 main = this.Owner as Form1;
    if(main != null)
    {
        string s = main.textBox1.Text;
        main.textBox1.Text = "OK";
    }
    
    • 访问第一个表单的所有打开字段/功能
    • 可以双向进行数据传输
    • 不要违反PLO
  6. 使用单独的课程。 创建一个单独的类,更好的静态,主要是命名空间,例如在Program.cs文件中

    static class Data
    {
        public static string Value { get; set; }
    }
    

    他的公共财产/方法可以从任何形式获得。

    Data.Value = "111";
    
    • 以多种形式积极使用数据时最方便的方式。
  7. 构造函数中的传递方法。 创建委托

    public delegate void MyDelegate(string data);
    

    在Form1中,创建一个处理接收数据的方法

    void func(string param)
    {
        //Process
    }
    

    创建第二个表单,如下所示:

    Form2 f = new Form2(new MyDelegate(GetData));
    f.ShowDialog();
    

    更改第二种形式的构造函数以接受委托

    MyDelegate d;
    public Form2(MyDelegate sender)
    {
        InitializeComponent();
        d= sender;
    }
    

    随时发送数据

    d(textBox1.Text);
    
  8. 使用委托创建单独的类。 在主命名空间中创建单独的类

    public static class Data
    {
        public delegate void MyEvent(string data);
        public static MyEvent EventHandler;
    }
    

    在第一种形式中,添加处理程序

    void func(string param)
    {
        MessageBox.Show(param);
    }
    

    并初始化EventHandler

    Data.EventHandler = new Data.MyEvent(func);
    

    以通常的方式创建第二个表单,然后从

    中调用它
    Data.EventHandler(textBox1.Text);
    
    • 最灵活的数据传输方式
    • 难以实施和理解

答案 2 :(得分:1)

这里你创建了一个继承自Form类的新类(Base类),如下所示:

[System.ComponentModel.DesignerCategory("")]
public class FormBase : System.Windows.Forms.Form
{
   public List<string> MyList;
}

之后继承这个类的所有ur形式(3个形式),如下所示:

[System.ComponentModel.DesignerCategory("Form")]
public partial class DeriveClass : FormBase
{
  private void Method()
  {
     base.MyList = new List<string>();
     // So something..
  }
}