C# 从另一个窗体将项添加到列表视图

本文关键字:添加 列表 视图 另一个 窗体 | 更新日期: 2023-09-27 18:31:27

我一直在寻找并尝试了一些东西,但没有运气

我有 2 个表单,表单 1 有一个列表视图,Form2 搜索一个项目,如果找到 Form2 中的项目,我想将其添加到 form1 中的列表视图中

注意 Form2 从 Form1 单击按钮时启动

Form1(名称为 MainScreen):

// Add item from  the add item dialog
    public void AddFromItemDialog(ListViewItem itms)
    {
        listItems.Items.Add(itms);
    }

表格2 ():

private void btnAdd_Click(object sender, EventArgs e)
    {
            MainScreen mainScreen = new MainScreen();
            MessageBox.Show("Item Added!");
            ListViewItem lvi = new ListViewItem();
            lvi.Text = "Item 1";
            lvi.SubItems.Add("Second Item");
            mainScreen.AddFromItemDialog(lvi);
    }

没有错误,但表单 1 中的列表视图中没有任何内容

C# 从另一个窗体将项添加到列表视图

您有一个堆栈变量:

MainScreen mainScreen = new MainScreen();

当函数退出时,它将不复存在。 尝试将其设置为类变量。 像这样:

private MainScreen mainScreen;
private void btnAdd_Click(object sender, EventArgs e)
{
    if (mainScreen == null)
    {
         mainScreen = new MainScreen();

您还必须显示表单,而不仅仅是创建表单。

您正在 Form2 中创建新的 MainForm,它不是创建 Form2 的窗体的实例,并且未显示,因此任何更改都不可见。使用"显示"或"显示对话框"时,可以选择设置"所属窗体"。 即

   frm2.Show(this);

然后,您可以从 AddItemDialog 窗体访问它。

private void btnAdd_Click(object sender, EventArgs e)
{
    MessageBox.Show("Item Added!");
    ListViewItem lvi = new ListViewItem();
    lvi.Text = "Item 1";
    lvi.SubItems.Add("Second Item");
    ((MainScreen)this.Owner).AddFromItemDialog(lvi);
}
尽管执行此操作的正确

方法是使用属性和事件来链接两个窗体,但这样创建的窗体就不需要具有创建窗体的内部知识。

我找到了解决方案,我想做的是将控制器从另一种形式更改为另一种形式,所以我只需要将第一个表单作为参数传递给第二个形式,所以这就是我现在拥有和工作。

表格1:

 private void button1_Click(object sender, EventArgs e)
        {
            AddItemDialog addItemDialog = new AddItemDialog(this);
            addItemDialog.Show();
        }
// Add item form  the add item dialog
    public void AddFromItemDialog(ListViewItem itms)
    {
        listItems.Items.Add(itms);
    }

表格2:

private MainScreen mainScreen;
 //overloaded constructor with handle to Form1
    public AddItemDialog(MainScreen frm1)
    {
        InitializeComponent();
        mainScreen = frm1;
    }
private void btnAdd_Click(object sender, EventArgs e)
{
        MessageBox.Show("Item Added!");
        ListViewItem lvi = new ListViewItem();
        lvi.Text = "Item 1";
        lvi.SubItems.Add("Second Item");
        mainScreen.AddFromItemDialog(lvi);
}