我一直在寻找并尝试一些但没有运气
我有2个表单,表单1有一个listview,Form2搜索一个项目,如果找到Form2中的项目我想将它添加到form1中的listview
注意Form2从Form1
上单击按钮启动Form1(名称为MainScreen):
// Add item from the add item dialog
public void AddFromItemDialog(ListViewItem itms)
{
listItems.Items.Add(itms);
}
Form2():
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的列表视图中
答案 0 :(得分:1)
你有一个堆栈变量:
MainScreen mainScreen = new MainScreen();
当函数退出时,它不再存在。尝试将其变为类变量。类似的东西:
private MainScreen mainScreen;
private void btnAdd_Click(object sender, EventArgs e)
{
if (mainScreen == null)
{
mainScreen = new MainScreen();
您还必须显示表单,而不仅仅是创建表单。
答案 1 :(得分:0)
我找到了解决方案,我想要做的是将控制器从另一个表单更改为所以我只需要将第一个表单作为参数传递给第二个表单,这样就是我现在所拥有和工作的。
Form1中:
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);
}
答案 2 :(得分:0)
您正在Form2中创建一个新的MainForm,它不是创建Form2的表单的实例,并且没有显示,因此任何更改都不可见。使用Show或ShowDialog时,您可以选择设置Owning Form。即。
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);
}
虽然这样做的正确方法是使用属性和事件来链接两个表单,这样创建的表单就不需要具有创建表单的内部知识。