在Form 2中使用Form 1中创建的类的实例

本文关键字:Form 实例 创建 | 更新日期: 2023-09-27 18:14:52

我想在表单2中使用表单1中生成的类的实例(我将其更改为示例代码的简单性列表:

不仅如此,我希望表单2能够修改它(在某个点清除它)。我得到的建议是这样的,虽然我没有被告知如何由于"不允许勺喂"

namespace automationControls.FileTime
{
    public class Form_Main : Form
    {
        public List<string> folderList; //<---- i want to access this.....
        private void button_showForm2_Click(object sender, EventArgs e)
        {
            Form_Log ConfirmBoxForm = new Form_Log(this);
            ConfirmBoxForm.Show();
        }
}
//form_Main opens form_Log

namespace automationControls.FileTime
{
    public partial class Form_Log : Form
    {
        public Form_Log(Form_Main _f1)
        {
           InitializeComponent();
        }
        private void Form1_FormClosing(Object sender, FormClosingEventArgs e)
        {
            How.Do.I.AccessForm_Main.folderList.Clear();//<---- ............. in this function
        }
     }
}
答:在Form_Log的构造函数中,将_f1的引用存储在Form_Log

在Form 2中使用Form 1中创建的类的实例

中可以从其他地方访问的地方。

为什么不使用已经添加表单的构造函数呢?

private Form_Main _mainForm;
public Form_Log(Form_Main _f1)
{
    InitializeComponent();
    _mainForm = _f1;
}
private void Form1_FormClosing(Object sender, FormClosingEventArgs e)
{
    var myList = _mainForm.folderList;
}

Try This,

public class Form_Main : Form
{
    public List<string> folderList; //<---- i want to access this.....
    private void button_showForm2_Click(object sender, EventArgs e)
    {
        Form_Log ConfirmBoxForm = new Form_Log(this);
        ConfirmBoxForm.Show();
    }
}

表单日志:

public partial class Form_Log : Form
{
    private Form_Main _mainForm;
    public Form_Log(Form_Main _f1)
    {
       InitializeComponent();
       _mainForm = _f1;
    }
    private void Form1_FormClosing(Object sender, FormClosingEventArgs e)
    {
      _mainForm.folderList.Clear();
    }
 }

我不知道你的项目有多先进,但在这种情况下,我会使用委托。我将这样做:

public delegate void ModifyCollectionHandler(string parameter);
public delegate void ClearCollectionHandler();
public partial class Form1 : Form
{
    public List<string> folderList;
    public Form1()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 form = new Form2()
        form.ClearItem+=form_ClearItem;
        form.AddItem+=form_AddItem;
        form.DeleteItem+=form_DeleteItem;
    }
    void form_DeleteItem(string parameter)
    {
        if (folderList == null)
            return;
        folderList.Remove(parameter);
    }
    void form_AddItem(string parameter)
    {
        if (folderList == null)
            folderList = new List<string>();
        folderList.Add(parameter);
    }
    void form_ClearItem()
    {
        if (folderList != null)
            folderList.Clear();
    }
}
public partial class Form2 : Form
{
    public event ModifyCollectionHandler AddItem;
    public event ModifyCollectionHandler DeleteItem;
    public event ClearCollectionHandler ClearItem;
    public Form2()
    {
        InitializeComponent();
    }
    private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (ClearItem != null)
            ClearItem();
    }
}
我希望我能帮到你:)最好的祝福

在Form1中放这个:

public static List<string> folderList;

你可以简单地从任何表单ex:Form2中调用它,像这样:

From1.folderList.Clear();