2013-05-03 2 views
0

Form1에 listView1이 있고 Form1의 listView1에 요소를 추가하는 Form2의 메서드가 있습니다. listView1이 존재하지 않는다는 오류가 발생합니다. 이 오류를 제거하려면 어떻게해야합니까?두 창에서 C# listView

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 –

+0

'Form2' 안에'Form1'에 대한 참조가 있습니까? – gunr2171

답변

1

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


} 

코드

Form2를에 대한 Form1에 2 양식,

코드를 사용하고이 샘플 코드를 사용하십시오 : 내 코드

Form2를하다

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

+0

처음 읽으십시오. http://csharpindepth.com/Articles/Chapter2/Events.aspx –

+0

이 샘플에서는 기능 포인터를 생성 한 감각에서 대리인을 만들었습니다. 위임자와 동일한 서명이있는 모든 방법으로 바인딩해야하는 위임자. Form1 클래스에서 AddItem() 메서드로 바인딩 된 Delagate Delagte Binded를 만든 다음 Dlegate 형식과 메서드 형식을 확인한 다음 Delegate Object를 Form2에 전달합니다. 여전히 당신이 엮은 방법은 form1에 있는데, Form2에서 Delegate를 실행하면 deleg (textBox1.Text); 실제로 그것은 Form1에서 AddItem 메서드를 실행합니다. 이것이 ListView가 업데이트 된 이유입니다. Delgate 및 Events에 대해 자세히 알아보십시오. –