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 中的列表视图中没有任何内容
您有一个堆栈变量:
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);
}