我有 2 个表格:Form1,Form2。Form1 已选中列表框:checkedlistbox1
我所需要的只是当我从 Form2 中单击一个按钮时,checklistbox 项目应该被清除。通过搜索,我找到并应用了此代码,但没有用。
using (Form1 form1 = new Form1())
{
form1.checkedListBox1.Items.Clear();
}
但没有用。请提出一些想法。
您正在创建一个未显示的新表单,并且正在清除该表单上的列表框。您需要的是对您已经打开的表单的引用。因此,无论您打开什么(可能来自 program.cs?),存储对 Form1 的引用,以便您可以从调用Form1
中使用该引用form2
checkedListBox1.Items.Clear();
因为当你这样做时
using (Form1 form1 = new Form1())
您实际上是在创建Form1
. 这就是为什么它不起作用。您需要获取Form1
.
foreach (var item in Application.OpenForms)
{
Form1 form1 = item as Form1;
if (form1 != null)
{
form1.checkedListBox1.Items.Clear();
}
}
或者可能
((Form1) Application.OpenForms["Form1"]).checkedListBox1.Items.Clear();
您所做的是创建 Form1 的新实例。您需要访问已创建的(填满列表)然后清除。
如果要在当前显示的表单上访问它,则必须将 Form1 的实例传递给 Form2。
如果您以下列方式从 Form1 中显示 Form2,
Form2 form2 = new Form2();
form2.ShowDialog(this);
然后,您可以使用,
using (Form1 form1 = ((Form1)Owner))
{
form1.checkedListBox1.Items.Clear();
}
你应该做几件事:
OnClick
事件form1reference.checkedListBox1.Items.Clear();
您在这里创建 Form1 的新实例,它将不起作用。使用所有者等属性。尝试这样的事情。
var myowner = this.Owner as Form1;
myowner.checkedListBox1.Items.Clear();
检查或更改 Form1 复选框的修饰符属性为 public
在表单 1 中将复选框 1 修饰符设置为公共,如果表单 1 已经打开,表单 2 代码将是:
private void button1_Click(object sender, EventArgs e)
{
form1.checkBox1.Checked = false;
}
使您的 CheckBoxList 从Form1.Designer.cs
.
然后
private void button1_Click(object sender, EventArgs e)
{
Form1 form1 = new Form1();
form1.Show();
//form1.checkedListBox1.SetItemChecked(0, true);
form1.checkedListBox1.Items.Clear();
}