2010-10-13 7 views
0

J'ai une boîte de groupe qui contient 10 cases à cocher. Je voudrais construire une chaîne qui concatène le Checkbox.Text de toutes les cases à cocher qui sont vérifiées.peupler la zone de texte basée sur checkbox.checked valeur de nombreuses cases à cocher

Bien sûr, à chaque fois que l'état coché change pour l'une des cases à cocher, il doit reconstruire la chaîne. Comment puis-je faire cela?

Remarque: Cela doit se produire à la volée lorsque les cases à cocher sont cochées/décochées.

C'est l'idée que j'avais, mais je pense qu'il y a une meilleure façon de le faire - et aussi je ne suis pas sûr de la façon dont je vais retirer les cordes lorsqu'un élément est décoché.

Des pensées?

private void CheckBox_CheckedChanged(System.Object sender, System.EventArgs e) 
{ 
    if (((CheckBox)sender).Checked) 
    { 
     switch (((CheckBox)sender).Name) 
     { 
      case "CheckBox1": 
       sb = sb + "This is checkbox 1." + "\n"; 
       break; 
      case "CheckBox2": 
       sb = sb + "This is checkbox 2." + "\n"; 
       break; 
      case "CheckBox3": 
       sb = sb + "This is checkbox 3." + "\n"; 
       break; 
      case "CheckBox4": 
       sb = sb + "This is checkbox 4." + "\n"; 
       break; 
      case "CheckBox5": 
       sb = sb + "This is checkbox 5." + "\n"; 
       break; 
      case "CheckBox6": 
       sb = sb + "This is checkbox 6." + "\n"; 
       break; 
      case "CheckBox7": 
       sb = sb + "This is checkbox 7." + "\n"; 
       break; 
      case "CheckBox8": 
       sb = sb + "This is checkbox 8." + "\n"; 
       break; 
      case "CheckBox9": 
       sb = sb + "This is checkbox 9." + "\n"; 
       break; 
      case "CheckBox10": 
       sb = sb + "This is checkbox 10." + "\n"; 
       break; 
     } 
    } 
    else 
    { 
    } 
} 

Répondre

1

Vous pouvez faire quelque chose comme cela, en supposant que le nom de case à cocher a le format « CheckBox # »:

private void checkBox_CheckedChanged(object sender, EventArgs e) 
{ 
    var checkboxes = from c in groupBox1.Controls.OfType<CheckBox>() 
         where c.Checked 
         orderby int.Parse(c.Name.Substring(8)) 
         select c; 

    sb.Clear(); 

    foreach (var cb in checkboxes) 
    { 
     sb.Append(string.Format("This is checkbox {0}", cb.Name.Substring(8))); 
     sb.Append(Environment.NewLine); 
    } 

    textBox1.Text = sb.ToString(); 
} 

Si vous ne voulez pas à se soucier du format des noms de cases à cocher, vous pouvez utiliser AlphanumComparator, bien que vous devrez apporter quelques modifications mineures à la source pour le rendre générique:

AlphanumComparator<string> comparator = new AlphanumComparator<string>(); 

var checkboxes = (from c in groupBox1.Controls.OfType<CheckBox>() 
        where c.Checked 
        select c).OrderBy(c => c.Name, comparator); 
+0

Works, beaucoup plus facile à suivre, + je viens juste de commencer l'apprentissage Linq, donc bonus pour réellement gettin g pour l'appliquer. Merci! – user234702

0

Le code ci-dessous fonctionne: cependant, je suis toujours intéressé à savoir s'il y a une meilleure façon de le faire?

private void CheckBox_CheckedChanged(System.Object sender, System.EventArgs e) 
     { 
      if (((CheckBox)sender).Checked) 
      { 
       switch (((CheckBox)sender).Name) 
       { 
        case "CheckBox1": 
         sb.Append("This is checkbox 1.\r\n"); 
         break; 
        case "CheckBox2": 
         sb.Append("This is checkbox 2.\r\n"); 
         break; 
        case "CheckBox3": 
         sb.Append("This is checkbox 3.\r\n"); 
         break; 
        case "CheckBox4": 
         sb.Append("This is checkbox 4.\r\n"); 
         break; 
        case "CheckBox5": 
         sb.Append("This is checkbox 5.\r\n"); 
         break; 
        case "CheckBox6": 
         sb.Append("This is checkbox 6.\r\n"); 
         break; 
        case "CheckBox7": 
         sb.Append("This is checkbox 7.\r\n"); 
         break; 
        case "CheckBox8": 
         sb.Append("This is checkbox 8.\r\n"); 
         break; 
        case "CheckBox9": 
         sb.Append("This is checkbox 9.\r\n"); 
         break; 
        case "CheckBox10": 
         sb.Append("This is checkbox 10.\r\n"); 
         break; 
       } 

       txtBox.Text = sb.ToString(); 
      } 
      else 
      { 
       switch (((CheckBox)sender).Name) 
       { 
        case "CheckBox1": 
         sb.Replace("This is checkbox 1.\r\n", ""); 
         break; 
        case "CheckBox2": 
         sb.Replace("This is checkbox 2.\r\n", ""); 
         break; 
        case "CheckBox3": 
         sb.Replace("This is checkbox 3.\r\n", ""); 
         break; 
        case "CheckBox4": 
         sb.Replace("This is checkbox 4.\r\n", ""); 
         break; 
        case "CheckBox5": 
         sb.Replace("This is checkbox 5.\r\n", ""); 
         break; 
        case "CheckBox6": 
         sb.Replace("This is checkbox 6.\r\n", ""); 
         break; 
        case "CheckBox7": 
         sb.Replace("This is checkbox 7.\r\n", ""); 
         break; 
        case "CheckBox8": 
         sb.Replace("This is checkbox 8.\r\n", ""); 
         break; 
        case "CheckBox9": 
         sb.Replace("This is checkbox 9.\r\n", ""); 
         break; 
        case "CheckBox10": 
         sb.Replace("This is checkbox 10.\r\n", ""); 
         break; 
       } 

       txtBox.Text = sb.ToString(); 
      } 
     } 
Questions connexes