2016-10-01 1 views
0

Ich versuche, die Daten aus einem Datagridview-Wert in Form1 in ein Textfeld in Form2 zu ziehen.So ziehen Sie Daten aus Datagridview in das Textfeld eines anderen Formulars

Form 1;

 public string xxx; 
     public string GetX() 
     { 
      return xxx; 
     }  

     private void addADocumentToolStripMenuItem_Click(object sender, EventArgs e) 
     {     
      if (dataGridView1.SelectedRows != null) 
      { 
       xxx = dataGridView1.CurrentRow.Cells["Name"].Value.ToString(); 

       AddDocumentForm adf = new AddDocumentForm(); 
       adf.ShowDialog(); 
      } 
      else 
      { 
       MessageBox.Show("Please choose a record."); 
       return; 
      } 
     } 

In Formular 2 versuchen, den Wert xxx in Textfeld zu ziehen;

using (Form1 f= new Form1()) 
      {      
       string result= f.GetX(); 
       txtSavedDocumentID.Text = result;  
      } 

Antwort

1

In Form2, erstellen Sie eine neue Instanz von Form1:

using (Form1 f= new Form1()) 

Da ich nicht den ganzen Code sehen kann, könnte ich falsch sein - aber ich denke, dass dies sehr wahrscheinlich ist, ist nicht was du willst.

Was Sie eigentlich wollen, ist GetX() auf einer vorhandenen Instanz von Form1 aufrufen.

Jetzt benötigen Sie einen Weg, um die korrekte Instanz von Form1 auf Form2 zu kennen. Eine einfache Möglichkeit ist, aber nur, wenn Sie immer nur eine Instanz von Form1 verwenden zu belichten, eine statische Eigenschaft auf Form1, die eine einzelne Instanz davon nach außen bieten wird:

public class Form1 
{ 
    // ... 

    public static readonly Form1 Instance {get; private set}; 

    public Form1() 
    { 
     Instance = this; 
    } 

    // ... 
} 

In Form2, anstatt eine neue Instanz mit Ihrer Verwendung Erklärung erstellen, können Sie es wie folgt zugreifen würde:

string result = Form1.Instance.GetX(); 
txtSavedDocumentID.Text = result; 

Jetzt bewusst sein, dass, wenn Ihre Anwendung die Möglichkeit, mehrere Instanzen von Form1 geöffnet haben muss, wird dies nicht funktionieren und wird schlechte Nebenwirkungen haben. In diesem Fall ist ein anderer Ansatz erforderlich. Aber ich hoffe, du hast jetzt die Idee, was falsch sein könnte und du kannst es herausfinden.

Bearbeiten: Während dies Ihr Problem hoffentlich lösen wird, möchte ich hinzufügen, dass es kein sehr guter Ansatz ist, wenn Ihre Forms über einander wissen müssen. Sie sollten Modellklassen im Hintergrund haben, in denen Ihre Formulare Daten lesen und schreiben können, ohne dass Sie direkt miteinander interagieren müssen. Aber dies weiter zu erforschen würde außerhalb der Reichweite dieser Frage liegen.

+0

Im Grunde versuche ich, den Wert von datagridview Zeile zu einer Variablen auf Form1 zu erhalten, dann möchte ich diesen Wert in Form2 verwenden, wenn ich es öffne. –

+0

Ja, so habe ich es verstanden. Aber auf Form2 erstellen Sie eine ** neue ** Form2-Instanz - was bedeutet, was Sie in der Hand haben, ist dann ein vollständig "leeres" Form2. Es ist nicht dieselbe Instanz, die Sie am wahrscheinlichsten erstellt und dem Benutzer früher gezeigt haben. Sie können dies versuchen, um zu verstehen, was ich meine: auf Form2, innerhalb Ihrer Using-Anweisung, zeigen Sie das Form1 auf dem Bildschirm von 'f.Show()' - Sie sehen ein völlig neues Fenster erscheint, die nichts mit dem zu tun hat Von 1 wollten Sie Ihre Variable abholen. Es ist ein anderes Fenster! –

+0

Leider habe ich bemerkt, dass ich die Forms-Namen gemischt habe: Mein erster Satz sollte sein: Aber auf Form2 erstellst du eine neue ** Form1 ** -Instanz - was bedeutet, dass du eine komplett "leere" Form1 hast ** . –

0

geändert Form2;

public Form2(string qs) 
     { 
      InitializeComponent(); 
      textBox1.Text = qs; 
     } 

In Form1;

den Text aus der Combobox holen und an form2 übergeben;

{ 
     var xxxx = (cbxEmployeeName.GetItemText(cbxEmployeeName.SelectedItem)); 
     Form2 f = new Form2(xxxx); 
     f.Show(); 
    } 
+0

dieser Ansatz funktioniert. –

Verwandte Themen