2014-11-22 49 views
0

我一直在尋找和嘗試一些事情,但沒有運氣C#添加項目,從另一種形式

我有2種形式的列表視圖中,表1有一個ListView和窗體2搜索的項目,如果在窗體2項發現我想將它添加到列表視圖在Form1

注意窗體2上的按鈕,點擊啓動從Form1中

Form1的(名字是MainScreen):

// Add item from the add item dialog 
    public void AddFromItemDialog(ListViewItem itms) 
    { 
     listItems.Items.Add(itms); 
    } 

窗體2():

private void btnAdd_Click(object sender, EventArgs e) 
    { 
      MainScreen mainScreen = new MainScreen(); 
      MessageBox.Show("Item Added!"); 

      ListViewItem lvi = new ListViewItem(); 
      lvi.Text = "Item 1"; 
      lvi.SubItems.Add("Second Item"); 

      mainScreen.AddFromItemDialog(lvi); 
    } 

有沒有錯誤,但沒有被添加到列表視圖形式1

回答

1

你有一個堆棧變量:

MainScreen mainScreen = new MainScreen(); 

當函數退出時,它便會消失。嘗試使它成爲一個類變量。例如:

private MainScreen mainScreen; 

private void btnAdd_Click(object sender, EventArgs e) 
{ 
    if (mainScreen == null) 
    { 
     mainScreen = new MainScreen(); 

您還必須顯示錶單,而不僅僅是創建它。

+0

這個工作,但事情是第二種形式作爲一個彈出式對話框,形式mainscreen(表格1)永遠不會關閉。什麼額外展(現在的情況)是創建mainscreen的新實例離開我的相同形式2的一個僅僅有我想 – user3772063 2014-11-22 16:16:07

+0

如果你是說mainScreen已經存在的項目,那麼你不應該創建一個新的。公開變量mainScreen並將其分配給現有表單。 – 2014-11-22 16:17:50

+0

@Stevens,我知道這現在聽起來stuid我不是所有的避讓VIR C#,但我怎麼然後把它公開,並作爲mainScreen是指實際的形式分配給它,我只是想什麼都得到由第二種形式發送要添加到所謂MainScreen – user3772063 2014-11-22 16:21:53

0

我找到了解決辦法,就是我想要做的是改變控制器從另一個窗體所以我必須通過第一種形式作爲參數傳遞給第二個形式,所以這是我現在已經和作品。

Form1中:

private void button1_Click(object sender, EventArgs e) 
     { 
      AddItemDialog addItemDialog = new AddItemDialog(this); 
      addItemDialog.Show(); 

     } 

// Add item form the add item dialog 
    public void AddFromItemDialog(ListViewItem itms) 
    { 
     listItems.Items.Add(itms); 
    } 

窗體2:

private MainScreen mainScreen; 

//overloaded constructor with handle to Form1 
    public AddItemDialog(MainScreen frm1) 
    { 
     InitializeComponent(); 

     mainScreen = frm1; 
    } 

private void btnAdd_Click(object sender, EventArgs e) 
{ 
     MessageBox.Show("Item Added!"); 

     ListViewItem lvi = new ListViewItem(); 
     lvi.Text = "Item 1"; 
     lvi.SubItems.Add("Second Item"); 

     mainScreen.AddFromItemDialog(lvi); 
} 
+0

認真嗎?這有效嗎?您正在使用按鈕單擊創建MainScreen,並且它超出了範圍。什麼都不會發送到Form1? – Uwe 2014-11-22 16:46:18

0

您正在創建窗體2新的MainForm,它不是創建窗體2和未因此顯示的任何變化形式的實例不可見。當您使用Show或ShowDialog時,您可以選擇設置擁有窗體。即

frm2.Show(this); 

然後你可以從你的AddItemDialog表單中訪問它。

private void btnAdd_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show("Item Added!"); 
    ListViewItem lvi = new ListViewItem(); 
    lvi.Text = "Item 1"; 
    lvi.SubItems.Add("Second Item"); 
    ((MainScreen)this.Owner).AddFromItemDialog(lvi); 
} 

雖然這樣做的正確方法是使用屬性和事件的兩種形式,這種方式有創建表單的內部知識不需要創建表格鏈接。