2016-05-21 10 views
0

Ich habe ein Formular mit 10 Optionsfeldern (Form2) für einen Benutzer zu überprüfen (alle in derselben Gruppe). Dann eine Schaltfläche, um zum nächsten Formular zu gelangen (Form3).Geprüftes Optionsfeld aktiviert durch Formulare C# Visual Studio 2010

Auf Form3 habe ich eine Zurück-Schaltfläche, um zu Form2 zurückzukehren, um das Optionsfeld bei Bedarf zu ändern.

Wenn die Zurück-Taste gedrückt wird, geht es mit allen Optionsfeldern zu Form2, zeigt jedoch nicht den zuvor aktivierten Radioknopf an.

Beispielcode:

string SchoolName = ""; 

if (radioButton1.Checked) 
{ 
    SchoolName = radioButton1.Text; 
} 

if (radioButton2.Checked) 
{ 
    SchoolName = radioButton2.Text; 
} 

und dann auf die vorherige Form zurück Taste zurück:

private void button3_Click(object sender, EventArgs e) 
{   
    this.Close(); 

    th = new Thread(opennewform); 
    th.SetApartmentState(ApartmentState.STA); 
    th.Start(); 
} 

private void opennewform(object obj) 
{ 
    Application.Run(new Form2()); 
} 

Antwort

0

Sie gehen nicht zur selben Instanz des Formulars zurück, Sie erstellen ein neues Formular. Siehe Projekt meines zwei untenstehendes Formular aus

Formular 1

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     Form2 form2; 
     public Form1() 
     { 
      InitializeComponent(); 
      form2 = new Form2(this); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      form2.Show(); 
      string results = form2.GetData(); 
     } 
    } 
} 

Formular 2

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form2 : Form 
    { 
     Form1 form1; 
     public Form2(Form1 nform1) 
     { 
      InitializeComponent(); 

      this.FormClosing += new FormClosingEventHandler(Form2_FormClosing); 
      form1 = nform1; 
      form1.Hide(); 
     } 
     private void Form2_FormClosing(object sender, FormClosingEventArgs e) 
     { 
      //stops form from closing 
      e.Cancel = true; 
      this.Hide(); 
     } 
     public string GetData() 
     { 
      return "The quick brown fox jumped over the lazy dog"; 
     } 

    } 
} 
1

die Form wie neue Form2 neu zu erstellen() eine initialisiert Form mit Standard hinzufügen Werte, und das wird in Lose Ihrer Änderungen resultieren.

lösen können Sie:

  • Spiel mit ein-/ausblenden statt schließen/new
  • speichern Objektzustand, beim erneuten Öffnen form2 Sie zum Beispiel
einen Konstruktor wie aufrufen
 


    new form2(check1State,check2State,selectedDropItem,txtName...); 

 
+0

Wenn Sie nach dem Objektzustand Version gehen gehen, sollten Sie wahrscheinlich ein Modell Klasse, den Zustand speichert Informationen, so würde Ihr Konstruktor so aussehen wie "public Form2 (Form2State stateObject)" und Form2State würde alle Werte enthalten, die Sie benötigen. – Travis

+0

@Travis, danke für den Tipp. Natürlich ist es eine gute Übung, Logik in Objekte zu kapseln, kann klar und schön sein, aber das ist kein Muss. Und von Zeit zu Zeit ist es vielleicht schneller/klarer, nur zwei oder drei Argumente zu übergeben, als das Objekt der Kapselung zu erstellen/schreiben/lesen/aktualisieren. –

1

In Ihrer opennewform() Methode instanziieren Sie eine neue Kopie von Form2 und gehen nicht zurück zu dem, den Sie kamen von ursprünglich. Deshalb wird Ihre ursprüngliche Radio-Button-Auswahl nicht gespeichert. Sie müssen irgendwie zur ursprünglichen Instanz Form2 zurückkehren, anstatt eine neue Instanz zu erstellen.

Zum Beispiel können Sie das Formular2 ausblenden, wenn Benutzer es schließt und erneut anzeigen, wenn der Benutzer es erneut benötigt.