2013-05-03 55 views
0

我在Form1和Form2中有一個listView1,它向Form1的listView1添加了一些元素。 我收到一個listView1不存在的錯誤。我怎樣才能消除這個錯誤。 我的代碼是在兩個窗口上的C#listView

窗體2:

public static string s; 
    public void button1_Click(object sender, EventArgs e) 
    { 
     s = textBox1.Text; 
     ListViewItem lvi = new ListViewItem(DodajWindow.s); 
     listView1.Items.Add(lvi); 
     this.Close(); 
    } 
+0

請使用委託http://stackoverflow.com/questions/16045581/accesing-richtextbox-from-a-class/16045806#16045806 – 2013-05-03 16:52:46

+0

Form2中有沒有對Form1的引用? – gunr2171 2013-05-03 18:59:56

回答

1

請使用此示例代碼使用2種形式,

代碼爲Form1

public delegate void ListViewAddDelegate(string text); 

namespace WindowsFormsApplication2 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     public void AddItem(string item) 
     { 
      listView1.Items.Add(item); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      ListViewAddDelegate Del = new ListViewAddDelegate(AddItem); 
      Form2 ob = new Form2(Del); 
      ob.Show(); 
     } 
    } 


} 

代碼窗體2

namespace WindowsFormsApplication2 
{ 
    public partial class Form2 : Form 
    { 
     public ListViewAddDelegate deleg; 
     public Form2() 
     { 
      InitializeComponent(); 
     } 
     public Form2(ListViewAddDelegate delegObj) 
     { 
      this.deleg = delegObj; 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      if (!textBox1.Text.Equals("")) 
      { 
       deleg(textBox1.Text); 
      } 
      else 
      { 
       MessageBox.Show("Text can not be emopty"); 
      } 

     } 

     private void Form2_Load(object sender, EventArgs e) 
     { 

     } 
    } 
} 
+0

你能否多解釋一下,這個機制是如何工作的? (我的意思是'代表'如何工作?) – user2323554 2013-05-03 21:21:16

+0

請先閱讀本文http://csharpindepth.com/Articles/Chapter2/Events.aspx – 2013-05-04 07:37:01

+0

在本示例中,我創建了Delegate,在Sense中創建了Functional Pointer,以使用委託你需要綁定任何具有Delegate相同簽名的Method。請參閱Dlegate類型和方法類型,當您在Form1類中創建一個Delagate Delagte綁定方法AddItem()時,然後您將委託對象傳遞給Form2。仍然你連接的方法是在Form1中,當你在Form2中觸發Delegate時,deleg(textBox1.Text);實際上它執行form1中的AddItem方法,這就是ListView被更新的原因。請詳細瞭解Delgate和Events。 – 2013-05-04 07:41:26