2016-03-31 15 views
0

Ich versuche, Werte von Telefonnummern basierend auf Kontrollkästchen in der Benutzeroberfläche hinzuzufügen. Wenn zum Beispiel ein checkbox1 (das phone1 darstellt) aktiviert ist und checkbox2 ebenfalls aktiviert ist, fügt das Programm die Werte beider Telefone hinzu. Wie kann ich den Wert hinzufügen (zum Beispiel in for-Schleife), so dass die if-Anweisung weniger und vereinfacht ist.C# Loop-Kontrollkästchen und Wert hinzufügen

Hier ist mein Code:

public double totalPhone() 
    { 
     double total = 0; 
     double item1 = 2249; 
     double item2 = 1769; 
     double item3 = 3099; 
     double item4 = 1198; 
     double item5 = 1899; 

     if (chkPhone1.Checked == true) 
     { 
      total = total + item1; 
     } 

     if (chkPhone2.Checked == true) 
     { 
      total = total + item2; 
     } 

     if (chkPhone3.Checked == true) 
     { 
      total = total + item3; 
     } 

     if (chkPhone4.Checked == true) 
     { 
      total = total + item4; 
     } 

     if (chkPhone5.Checked == true) 
     { 
      total = total + item5; 
     } 

     return total; 
    } 
+0

welche Art von Anwendung ist das? –

+0

Haben Sie eine feste Checkbox? Ihre Werte sind fest (wie 2249, 1769, etc ...)? –

+0

Was hast du an der Loop-Front versucht? Ich könnte mir vorstellen, dass Sie so etwas wie die Kontrollkästchen in einer Sammlung haben, die Sie durchlaufen. – jdphenix

Antwort

0

diese Ankreuzfeld ist vorausgesetzt, sind alle in der gleichen GroupBox Steuerung nur Schleife über die Kontrollen in diesem spezifischen groupbox. Ich habe das getestet und es scheint zu funktionieren. Verwenden Sie das Tag-Eigenschaft des Kontrollkästchen Elements den Wert speichern zugeordnet es:

public partial class Form1 : Form 
{ 
    private static double Total { get; set; } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     var ctrl = groupBox1; 
     foreach (var checkBox in ctrl.Controls.OfType<CheckBox>()) 
     { 
      Total = checkBox.Checked ? (Total + Convert.ToDouble(checkBox.Tag)) : Total; 
     } 
    } 
} 
+0

Wie behebt man das? "Der Name 'Total' existiert im aktuellen Kontext nicht." – izzudinanuar

+0

Schauen Sie sich die Variable Total in der Klasse über – aguertin

+0

an Warum die Summe verdoppelt? – izzudinanuar

0

Sie können die IDs der Kontrollkästchen speichern und ihre entsprechenden Werte in einem Wörterbuch und dann eine Schleife durch die Kontrollen, überprüfen Sie seine Art und Eigenschaft überprüft und dann den Wert hinzufügen entspricht der ID des Kontrollkästchens aus dem Wörterbuch.

Hinweis: Code ist nicht getestet, aber dies sollte Sie auf den Weg bringen.

public double totalPhone() 
{ 
    double total = 0; 
    Dictionary<string,double> items = new Dictionary<string,double>(); 

    items.Add(chkPhone1.ID,2249); // ID,Text whatever works 
    items.Add(chkPhone2.ID,1769); 
    items.Add(chkPhone3.ID,3099); 
    items.Add(chkPhone4.ID,1198); 
    items.Add(chkPhone5.ID,1899); 

    foreach(Control c in this.Controls) 
    { 
     if(c is CheckBox && c.Checked) 
     { 
      total += (items[c.ID] != null ? items[c.ID] : 0); 
     } 
    } 
    return total; 
} 
0

Ich bin sicher, dass es einige Refactoring auf Ihrem Code erforderlich ist, aber ich sehe keinen Fall Schleife für diesen einfachen Fall zu verwenden.

Noch interessiert? Du könntest so etwas tun. Bitte beachten Sie, dass bei diesem Code eine Eins-zu-eins-Zuordnung zwischen und Kontrollkästchenname angenommen wird.

Dictionary<string, int> values = new Dictionary<string,int>(); 

int total = 0; 
values.Add("item1", 2249); 
values.Add("item2", 1769); 
values.Add("item3", 3099); 
values.Add("item4", 1198); 
values.Add("item5", 1899); 


foreach(CheckBox cb in this.Controls.OfType<CheckBox>() 
          .Where(c=>c.Checked)) 
{ 
    int itemprice; 
    if(values.TryGetValue("item"+ Regex.Match(cb.Text, @"\d+").Value, out itemprice)) 
    { 
     total+=itemprice; 
    } 
} 
+0

wenn ich den Gesamtpreis des Telefons in bestimmten Groupbox berechnen möchte, wo sollte ich den Code ändern? – izzudinanuar

+0

Ich bekomme unterschiedliche Werte für verschiedene Artikel. Ich weiß nicht warum. – izzudinanuar

+0

Sind die Checkboxen mit Text wie 'checkbox1, checkbox2 ....' so? –

Verwandte Themen