0

我有 2 个表格:Form1Form2。Form1 已选中列表框:checkedlistbox1

我所需要的只是当我从 Form2 中单击一个按钮时,checklistbox 项目应该被清除。通过搜索,我找到并应用了此代码,但没有用。

using (Form1 form1 = new Form1())
      {
          form1.checkedListBox1.Items.Clear();
      }

但没有用。请提出一些想法。

4

9 回答 9

3

您正在创建一个未显示的新表单,并且正在清除该表单上的列表框。您需要的是对您已经打开的表单的引用。因此,无论您打开什么(可能来自 program.cs?),存储对 Form1 的引用,以便您可以从调用Form1中使用该引用form2checkedListBox1.Items.Clear();

于 2012-06-25T06:58:47.330 回答
3

因为当你这样做时

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();
于 2012-06-25T07:01:56.730 回答
1

您所做的是创建 Form1 的新实例。您需要访问已创建的(填满列表)然后清除。

于 2012-06-25T06:58:12.040 回答
1

如果要在当前显示的表单上访问它,则必须将 Form1 的实例传递给 Form2。
如果您以下列方式从 Form1 中显示 Form2,

Form2 form2 = new Form2();            
  form2.ShowDialog(this);

然后,您可以使用,

using (Form1 form1 = ((Form1)Owner))
  {
    form1.checkedListBox1.Items.Clear();
  }
于 2012-06-25T06:58:47.233 回答
0

你应该做几件事:

  • 确保 form1 的访问修饰符是 public
  • 注册到form2上的按钮OnClick事件
  • 从Form2获取Form1的引用,我们称之为form1reference
  • 点击事件你应该写:form1reference.checkedListBox1.Items.Clear();
于 2012-06-25T06:56:09.603 回答
0

您在这里创建 Form1 的新实例,它将不起作用。使用所有者等属性。尝试这样的事情。

var myowner = this.Owner as Form1;
myowner.checkedListBox1.Items.Clear(); 
于 2012-06-25T06:59:46.300 回答
0

检查或更改 Form1 复选框的修饰符属性为 public

于 2012-06-25T07:02:45.310 回答
0

在表单 1 中将复选框 1 修饰符设置为公共,如果表单 1 已经打开,表单 2 代码将是:

 private void button1_Click(object sender, EventArgs e)
    {
        form1.checkBox1.Checked = false;

    }
于 2012-06-25T07:03:28.623 回答
0

使您的 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(); 
}
于 2012-06-25T07:13:22.270 回答