簡體   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