繁体   English   中英

需要在C#中访问其他Winform

[英]Need to access the other winform in c#

我有2种形式: Form1Form2 Form1的清单框为: 清单框1

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

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

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

您正在创建一个不显示的新表单,并清除了该表单上的列表框。 您需要的是对您已经打开的表单的引用。 因此,无论您在何处打开Form1 (可能是从program.cs?),都存储对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();
  }

您应该做几件事:

  • 确保form1的访问修饰符是公共的
  • 注册到form2上的按钮OnClick事件
  • 从Form2获取Form1的引用,我们称它为form1reference
  • 在click事件上,您应该编写: form1reference.checkedListBox1.Items.Clear();

您正在创建Form1的新实例,在这里它将无法正常工作。 使用诸如Owner等的属性。尝试类似的方法。

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

检查或将您的Form1复选框的Modifys属性更改为public

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

 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(); 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM