2017-06-21 4 views
0

folgenden Problem Ich habe eine WinForm-App, wo ich Variablen, hier nur Zeichenfolge, dezimal oder int, durch Benutzer-Eingabe setzen. Dies geschieht durch Eingabe von Werten in Textfeldern oder durch Setzen von Werten in Textfeldern mit Schaltflächen (erhöhen und verringern). Außerdem gibt es zwei Checkbox-Paare (2x ja/nein). Die Kontrollkästchen speichern auch eine Zeichenfolge in meinen benötigten Werten.C# Überprüfe, ob alle Variablen gefüllt sind, bevor ein Formular

Nachdem der Wert in das Textfeld eingegeben wurde oder auf die richtige Zahl eingestellt wurde, drückt der Benutzer eine Schaltfläche zum Speichern (eine Schaltfläche für jeden Wert, insgesamt 6 Speicherschaltflächen). Der Save-Button stellt immer sicher, dass der richtige Wert eingegeben wurde, bevor Sie speichern

Bevor ich das Formular schließe, möchte ich überprüfen, ob alle meine benötigten Werte gefüllt wurden und wenn nicht, sage dem Benutzer: Hey, du hast das vergessen Wert. Wie kann ich das erreichen? In meinem Beispiel würde ich prüfen wollen, ob Höhe, Einheit und No_of_measure mit einem Wert gefüllt wurden. Ich könnte es einfach in ein großes "wenn" mit "logisch" oder "drin" (ungefähr 14 Werte insgesamt) umwandeln, aber dann bekomme ich nicht den spezifischen Wert, der fehlt, sollte einer nicht ausgefüllt werden (dem Benutzer zu sagen))

Beispiel:

public decimal Height { get; private set; } 
    public int No_of_measure { get; private set; } 
    public string Unit { get; private set; } 

    private void button3_Click(object sender, EventArgs e) //Save the rough heigth 
    {              
     if (textBox2.Text == "") 
     { MessageBox.Show("No value detected in [Current Height] Window. Please Click Start first!"); } 
     else 
     { 
      Height = Convert.ToDecimal(textBox2.Text); 
     } 
    } 

    private void button5_Click(object sender, EventArgs e) //save no. of measurements 
    { 
     if (textBox5.Text == "") 
     { MessageBox.Show("Please enter a value"); } 
     else 
     { No_of_measure = Convert.ToInt32(textBox5.Text); } 
    } 

    private void checkBox3_CheckedChanged(object sender, EventArgs e) //save Unit mm 
    { 
     if (checkBox3.Checked == true) 
     { 
      checkBox4.Checked = false; 
      Unit = "mm"; 
     } 
     label22.Text = "mm"; 
     label23.Text = "mm"; 
+1

Ist das ein Windows Forms-Anwendung, Web-App? – mjw

+0

ist eine WinForm-App. Ich werde es in die Beschreibung setzen – Chris

+0

können Sie bitte die Bedingung posten, was Sie versucht haben –

Antwort

0

Mit Bezug darauf, wie für null in mehreren Eigenschaften, eine grobe Art und Weise wäre zu prüfen, Ihre Werte in einem Wörterbuch zu speichern, wo Sie eine Linq-Abfrage, wie unten ausgeführt werden können .. Diese würde erfordern, dass Sie größere Änderungen an Ihrem Formular vornehmen.

// properties dictionary populate with your values 
    Dictionary<string,string> _propertiesDictionary = new Dictionary<string, string>(); 

    private bool PropertyChecks() 
    { 
     return _propertiesDictionary.Any(x => x.Value == null); 
    } 

Sie können eine form_closing Ereignismethode anlegen und jede Logik, die Sie innerhalb dieses benötigen, beispiels ..

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
    { 
     if (PropertyChecks()) 
     { 
      MessageBox.Show("Some properties are null"); 
      e.Cancel = true; 
     } 
    } 
+0

Ich nehme an, Sie haben gerade ein Wörterbuch erstellt und ihm keine Eigenschaften hinzugefügt. –

+0

Korrigieren, Sorry Ich war in Eile .. Sie würden dies zunächst mit einigen leeren Werten mit korrekten Schlüssel als Bezeichner – uk2k05

+0

füllen, aber ich denke nicht, dass dies funktioniert, weil wir dieses Wörterbuch aktualisieren müssen, wenn wir die Eigenschaft aktualisieren –

Verwandte Themen