2017-02-13 3 views
0

i ein Programm schreibe die Array-Liste der Form 1 in Form zuzugreifen 2.in Programm folgende i bin in der Lage, darauf zuzugreifen, sondern in Form 2 die Array-Liste (von Form 1) auf die ich zugreife, ist leer. Was kann der Grund dafür sein? Das Programm für form1 ist wie folgt:C#: Fehler während der Arraylist von form1 von form2 Zugriff

public partial class Form1 : Form 
    { 
     public ArrayList hop = new ArrayList(); 

     public Form1() 
     { 
      InitializeComponent(); 
     }  

     private void button1_Click(object sender, EventArgs e) 
     { 
      hop.Add("2016"); 
      hop.Add("2015"); 
      Form2 f = new Form2(); 
      f.checkedListBox2.Text = this.textBox1.Text; 
      f.Show(); 
     } 
    } 

für Form 2 wie folgt:

public partial class Form2 : Form 
    { 
     ArrayList hop2 = new ArrayList(); 
     public Form2() 
     { 
      InitializeComponent();   
     } 
     private void Form2_Load(object sender, EventArgs e) 
     { 
      hop2.Add("2016"); 
      Form1 fp = new Form1(); 
      // fp.hop.Add("kite"); 
      if (hop2[1] == fp.hop[1]) 
       MessageBox.Show("equal"); 
      else 
       MessageBox.Show("not equal"); 
     } 
    } 
+0

instanziiert Sie einen neuen 'Form1' in Ihrem' Form2_Load', so dass Ihre 'Arraylist hop' nie mit irgendwelchen Werten (von' button1_Click') gefüllt ... – stefankmitph

Antwort

-2
ArrayList hop2 = new ArrayList(); 

public ArrayList hop2 = new ArrayList(); 
+0

Sie sollten wirklich hinzufügen einige Erklärungen, warum dies funktionieren sollte - Sie können auch Kommentare in den Code selbst einfügen - in seiner aktuellen Form bietet es keine Erklärung, die dem Rest der Community helfen kann zu verstehen, was Sie getan haben, um die Frage zu lösen/zu beantworten. – ishmaelMakitla

1

sein Sollte Ihr Form1 zum Form2 Konstruktor übergeben:

public partial class Form1 : Form 
{ 
    public ArrayList hop = new ArrayList(); 

    public Form1() 
    { 
     InitializeComponent(); 
    }  

    private void button1_Click(object sender, EventArgs e) 
    { 
     hop.Add("2016"); 
     hop.Add("2015"); 
     Form2 f = new Form2(this); 
     f.checkedListBox2.Text = this.textBox1.Text; 
     f.Show(); 
    } 
} 

eine Instanz Ihrer Form1 in Form2 Get:

public partial class Form2 : Form 
{ 
    ArrayList hop2 = new ArrayList(); 
    private readonly Form1 m_parentForm; 
    public Form2(Form1 parentForm) 
    { 
     InitializeComponent();   

     m_parentForm = parentForm; 
    } 
    private void Form2_Load(object sender, EventArgs e) 
    { 
     hop2.Add("2016"); 

     if (hop2[1] == m_parentForm.hop[1]) 
      MessageBox.Show("equal"); 
     else 
      MessageBox.Show("not equal"); 
    } 
} 

HINWEIS: Seien Sie vorsichtig, gibt es keine Null-Kontrolle oder nichts.

+0

es funktioniert..können Sie mir bitte erklären, die Arbeit/Rolle von 'this' in dieser' 'Form2 f = new Form2 (this);' Anweisung. –

+0

@pranjalkhanduri [this] (https://msdn.microsoft.com/en-us/library/dk1507sz.aspx) ist die aktuelle Instanz Ihrer Klasse. In diesem speziellen Fall ** ist ** der Verweis auf "Form1", den Sie an "Form2" übergeben müssen. – stefankmitph

1

Verwenden constructer Parameter den Wert form2 passieren.

public partial class Form1 : Form 
    { 
     public ArrayList hop = new ArrayList(); 

     public Form1() 
     { 
      InitializeComponent(); 
     }  

     private void button1_Click(object sender, EventArgs e) 
     { 
      hop.Add("2016"); 
      hop.Add("2015"); 
      Form2 f = new Form2(hop); 
      f.checkedListBox2.Text = this.textBox1.Text; 
      f.Show(); 
     } 
    } 

Form2 Code

public partial class Form2 : Form 
    { 
     private ArrayList _hopForm1; 
     ArrayList hop2 = new ArrayList(); 
     public Form2(ArrayList hopForm1) 
     { 
      InitializeComponent(); 
      _hopForm1 = hopForm1 
     } 
     private void Form2_Load(object sender, EventArgs e) 
     { 
      hop2.Add("2016"); 
      Form1 fp = new Form1(); 
      // fp.hop.Add("kite"); 
      if (hop2[1] == _hopForm1[1]) 
       MessageBox.Show("equal"); 
      else 
       MessageBox.Show("not equal"); 
     } 
    } 
+0

hat es auch funktioniert .für mich. –

+0

Bitte wählen Sie die Antwort aus, die Ihnen am besten gefällt. –

0

Sie should.t eine neue Form1 auf Form2 Last erstellen. Verwenden Sie Application.OpenForms als:

private void Form2_Load(object sender, EventArgs e) 
{ 
     hop2.Add("2016"); 
     var f1 = (Form1)Application.OpenForms[0];//<--this references Form1 current instance 
     if (hop2[1] == f1.hop[1]) 
      MessageBox.Show("equal"); 
     else 
      MessageBox.Show("not equal"); 
} 
Verwandte Themen