2016-07-13 10 views
-4

Ich bin in der Mitte eines Projekts und ich versuche, ein Bool von einem Formular zum anderen zu übergeben, aber jedes Mal, wenn ich es tue funktioniert es nicht.Bool von einem Formular zu einem anderen übergeben (funktioniert nicht)

Formular 1

public bool test = false; 
private void bluelineToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    this.BackgroundImage = Properties.Resources.Background_Mainframe_Blueline; 
    test = true; 
} 

Formular 2

private void AboutWindow_Load(object sender, EventArgs e) 
{ 
    Mainframe main = new Mainframe(); 

    if (main.test == true) //reads test as false rather then true. 
    { 
     this.BackgroundImage = Properties.Resources.Background_About_Blueline; 
    } 
} 

Wenn die zweite Form lädt sie die bool als wahr zu lesen, aber es liest als falsch.

Bin ich den Bool falsch lesen?

Kann jemand bitte helfen.

+0

Ist es wahr, wenn das Formular geladen? Es sieht so aus, als ob Sie test nur dann auf "true" setzen, wenn die Schaltfläche gedrückt wird, möglicherweise nachdem das Formular geladen wurde. Auch so funktioniert das nicht. Wenn Form2 in Form1 enthalten ist, wird es die Existenz von Form1 wie jedes andere Objekt in C# nicht kennen. Wenn Sie Ihr zweites Formular wirklich benötigen, um Daten aus dem ersten Formular abzurufen, können Sie Form1-Aufrufmethoden auf Form2 haben, die Daten darin mutieren. – Ares

+1

liegt daran, dass Sie ein neues Hauptformular erstellen, das die Variablen auf ihre Standardwerte zurücksetzt, anstatt auf das Hauptformular zu verweisen, das Sie bereits erstellt haben. Erstellen Sie eine neue Klassendatei und fügen Sie die bool-Variable in diese neue Klasse ein und verwenden Sie diese in beiden Formularen. – sous2817

+0

Warum sollte das About-Fenster einen neuen Mainframe erstellen? Ich vermute, dass Sie das tun, nur um auf ein Objekt zugreifen zu können, aber in Wirklichkeit müssen Sie auf eine vorhandene Instanz von Mainframe zugreifen. –

Antwort

1

Ja. Das ist wahr. Bei Form2 Lasten wird das main Formular initialisiert. In der Initialisierung main.test ist False. Sie müssen auf bluelineToolStripMenuItem von main Formular klicken, um main.test zu True zu setzen. Aber die if-Bedingung prüft gerade nach der Initialisierung von main Form.

1

Sie müssen einen Verweis auf das übergeordnete Formular übergeben, wenn Sie das untergeordnete Formular erstellen und nicht ein neues innerhalb des untergeordneten Formulars instanziieren.

1

Dies wurde gelöst, indem eine neue öffentliche Klasse namens Variables.cs erstellt und dann die Variablen zur Klasse hinzugefügt und in anderen Klassen aufgerufen wurden.

Beispiel:

Variables.cs

public class Variables 
{ 
    public static bool test = false; 
} 

Form1

private void bluelineToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    Variables.test = true; 
}