[英]Need to access the other winform in c#
我有2種形式: Form1 , Form2 。 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();
}
您應該做幾件事:
OnClick
事件 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.