需要访问c#中的其他winform

时间:2012-06-25 06:54:52

标签: c# winforms

我有两种形式: Form1 Form2 。 Form1有checkedlistbox: checkedlistbox1

我需要的只是当我从Form2中单击一个按钮,然后checkedlistbox项应该是清楚的。 从搜索我发现并应用此代码但无效。

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

但没有奏效。 请提出一些想法。

9 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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();

答案 2 :(得分:1)

您所做的是创建Form1的新实例。您需要访问已创建的那个(填充列表),然后执行清除。

答案 3 :(得分:1)

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

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

然后,您可以使用,

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

答案 4 :(得分:0)

你应该做一些事情:

  • 确保form1的访问修饰符为public
  • 注册到form2
  • 上的按钮OnClick
  • 从Form2获取Form1的引用,我们称之为form1reference
  • 点击活动时,您应该写:form1reference.checkedListBox1.Items.Clear();

答案 5 :(得分:0)

您正在创建Form1的新实例,它将无法正常工作。使用像所有者等属性。尝试这样的事情。

var myowner = this.Owner as Form1;
myowner.checkedListBox1.Items.Clear(); 

答案 6 :(得分:0)

检查或更改Form1复选框的modifiers属性为public

答案 7 :(得分:0)

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

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

    }

答案 8 :(得分:0)

Form1.Designer.cs公开您的CheckBoxList。

然后

private void button1_Click(object sender, EventArgs e)
{
    Form1 form1 = new Form1();
    form1.Show();   
    //form1.checkedListBox1.SetItemChecked(0, true);
    form1.checkedListBox1.Items.Clear(); 
}