2016-04-22 5 views
0

Ich versuche, einen Etikettentext in ein anderes Formular innerhalb derselben Lösung zu ziehen, um in einer if-Anweisung zu verwenden. Es scheint jedoch so, als würde es die Daten nicht aus dem Feld ziehen. Ich versuche, die Farbe des Aufkleberhintergrundes zu ändern, der auf dem Etiketttext in Form 1 basiert. Jede Hilfe wird sehr geschätzt.Wie man auf Daten von einem Formular zugreift und zu einem anderen bringt

IN FORM 1:

public void button1_Click(object sender, EventArgs e) 
{ 
    form1 view = new form(); 
    view.Show(); 
    view.label1 = label1.Text.ToString(); 
} 

IN FORM 2:

public string label1 { get; set; } 

public void Display() 
{ 
    if (label1 == "1") 
    { 
     for (int i = 0; i < nWinnings.Length; i++) 
     { 
      Label label = new Label(); 
      label.BackColor = Color.Red; 
      ... 
     } 
    } 
    else 
    { 
     for (int i = 0; i < nWinnings.Length; i++) 
     { 
      Label label = new Label(); 
      label.BackColor = Color.Blue; 
      ... 
     } 
     } 
} 

Es gibt mehr zu dem Etikett, aber das Label ist adaequat minus der Farbwechsel.

Antwort

1

Dies ist falsch:

Label label = new Label(); 

Sie können eine neue Instanz Ihrer Label nicht schaffen ... es hat absolut keine Verbindung zur ursprünglichen Label Instanz im ersten Form, und auf ihn jede Eigenschaft zu ändern wird das Original auch nicht beeinflussen.


Sie werden einen Verweis auf die gesamten Label geben müssen:

// Form 1 

public void button1_Click(object sender, EventArgs e) 
{ 
    form1 view = new form(); 
    view.label1 = label1; 
    view.Show(); 
} 

// Form 2 

public Label label1 { get; set; } 

public void Display() 
{ 
    if (label1.Text == "1") 
    { 
     for (int i = 0; i < nWinnings.Length; i++) 
     { 
      label1.BackColor = Color.Red; 

      // ... etc, etc 

Ich beschränke würde, wie viel, das um von Verweisen auf Steuerelemente, die Sie in anderen Formen zu tun. Meiner Erfahrung nach fängt Code an, zu matschig zu werden, wenn du das zu viel tust.

+0

Vielen Dank für die Erklärung @Grant Winney. Ich habe diese Änderung versucht, und ich bekomme eine "NullReferenceException wurde nicht behandelt". – Jret

+0

Auf welcher Linie? Sind Sie sicher, dass Sie den Verweis auf das Label richtig übergeben? –

+0

An der if-Anweisung. Ich glaube schon, obwohl ich ziemlich neu in C# bin und etwas Grundlegendes verpasst haben könnte. – Jret

0

Wenn was ich richtig verstanden habe, haben Sie 2 Formen. FORM1 & FORM2. Sie haben ein Label-Steuerelement LABEL1 in FORM1. Sie lesen diesen Text und übergeben ihn an FORM2.

In FORM2 haben Sie ein anderes Label-Steuerelement LABEL2, deren Hintergrundfarbe Sie ändern möchten.

Sie können eine Zeichenfolgevariable in FORM2 deklarieren. Fügen Sie FORM2 einen neuen Konstruktor hinzu, um ein Zeichenfolgenargument zu akzeptieren, und legen Sie diesen Wert auf die Zeichenfolgenvariable fest. In FORM2 OnLoad können Sie dann den Wert Ihrer String-Variablen und dann LABEL2.BackColor = whateverColor in der If-else-Schleife überprüfen.

so etwas wie dies in FORM1

FORM2 newForm = new FORM2(LABEL1.Text); 
newForm.Show(); 

und in FORM2

private label1String = String.Empty(); 

public FORM2(string arg) 
{ 
    ...Default Initialization Code... 
    label1String = arg; 
} 

private void ChangeLabel2Color() 
{ 
    if(label1String == "1") 
    { 
     LABEL2.BackColor = whateverColorYouNeed; 
    } 
    else 
    { 
     ...WHATEVER YOU NEED TO DO... 
    } 
} 

Ich schrieb den Code direkt, so könnte es Syntaxfehler sein.

Verwandte Themen