myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Mehrere Checkboxen nach Eigenschaft:".IsChecked" abfragen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Mehrere Checkboxen nach Eigenschaft:".IsChecked" abfragen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
SharpLat SharpLat ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.02.2019
Beiträge: 4
Entwicklungsumgebung: MS Visual Studio 2017


SharpLat ist offline

Mehrere Checkboxen nach Eigenschaft:".IsChecked" abfragen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo, C#-Community,
zuerst einmal muss ich sagen, dass ich ein C#-Anfänger bin.

Nun zur meiner Frage bzw. meinem Problem:
Ich habe 10 Checkboxes und diese möchte ich alle nach der .IsChecked - Eigenschaft abfragen, um darauf ein Array mit ausgewählten Zahlen zu füllen.

Ich habe eine Lösung über eine einfache if-Anweisung gefunden, die ist aber extrem lang und um ehrlich zu sein "unschön". Die Checkboxes wurden in XAML einzeln erstellt:

XML-Code:
<CheckBox x:Name="check1" Content="Lektion 1" HorizontalAlignment="Left" Margin="62,68,0,0" VerticalAlignment="Top"/>

also nach diesem Beispiel.

C#-Code:
int[] ins = new int[9];
            if (check1.IsChecked == true)
            {
                ins[0] = 1;
            }
            else
            {
                ins[0] = 0;
            }
            if (check2.IsChecked == true)
            {
                ins[1] = 2;
            }
            else
            {
                ins[1] = 0;
            }

Die im Codebeispiel gezeigten Einheiten (logischerweise ohne die Deklaration und Initialisierung des Arrays) wurden für jede einzelne -der 10 Checkboxes- erstellt, was echt viel (unnützen?) Code mit sich bringt.
Deswegen frage ich mich bzw. euch, ob man das auch durch eine Schleife oder Ähnliches/Anderes lösen kann?
Ich erwarte hier -gemäß der Regeln- auch keine vollendete Lösung und bin dankbar für jeden Tipp, da ich nach langer Suche im Internet und auch mit der Benutzung der "Suchen-Funktion" keine Ergebnisse fand.
01.02.2019 23:09 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.166
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

In WPF und XAML solltest Du immer mit dem MVVM Pattern und Datenbindung arbeiten - immer.
Das gesamte Konzept von WPF basiert darauf. Und Du hast richtig erkannt: Du brauchst sehr viel Code, wenn Du dies nicht machst - hinzu kommen unzählige Workarounds, die benötigt werden.

 [Artikel] MVVM und DataBinding

Das Problem würde sich bei MVVM gar nicht erst ergeben.
01.02.2019 23:18 Beiträge des Benutzers | zu Buddylist hinzufügen
SharpLat SharpLat ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.02.2019
Beiträge: 4
Entwicklungsumgebung: MS Visual Studio 2017

Themenstarter Thema begonnen von SharpLat

SharpLat ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke, für deine Antwort.
Werde mich in das Thema MVVM direkt mal einlesen.
01.02.2019 23:24 Beiträge des Benutzers | zu Buddylist hinzufügen
Caveman Caveman ist männlich
myCSharp.de-Mitglied

avatar-3854.jpg


Dabei seit: 18.10.2009
Beiträge: 105
Entwicklungsumgebung: VS2015P; VS2017P


Caveman ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

So könnte man es machen. Willst du nur angewählte Checkboxen filtern, dann kannst Du im Lambda die Kommentarzeichen entfernen.
Im Xaml habe ich den Checkboxen in der Tag-Eigenschaft je einen Wert zugewiesen, der dann in der Schleife für die Nummer und den Array Index herangezogen wird.
Die Checkboxen liegen bei mir im Xaml in einem Stackpanel mit Namen stack - Variable im Lambda

C#-Code:
int[] ins = new int[9];
            var checkBoxes = stack.Children.OfType<CheckBox>();//.Where(cb => cb.IsChecked ?? false);

            foreach (CheckBox checkbox in checkBoxes)
            {
                int number = int.Parse((string)checkbox.Tag);
                int index = number--;
                if (checkbox.IsChecked.HasValue && checkbox.IsChecked.Value)
                {
                    ins[index] = number;
                }
                else
                {
                    ins[index] = 0;
                }
            }
02.02.2019 00:34 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 2.014


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Und bitte angewöhnen das "== true" wegzulassen, denn es genügt zu schreiben "wenn die Box gecheckt ist", statt "wenn es wahr ist dass die Box gecheckt ist" ;-)
02.02.2019 14:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Coffeebean Coffeebean ist männlich
myCSharp.de-Team

avatar-3295.gif


Dabei seit: 25.08.2011
Beiträge: 2.185
Entwicklungsumgebung: VS 2005-2017, VS Code
Herkunft: Deutschland/Schweiz


Coffeebean ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Siehe auch  [Tipp] Anfängerhinweis == true / == false

Gruss

Coffeebean
04.02.2019 06:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
SharpLat SharpLat ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.02.2019
Beiträge: 4
Entwicklungsumgebung: MS Visual Studio 2017

Themenstarter Thema begonnen von SharpLat

SharpLat ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke, für den Hinweis, chilic.
Ist mir bis jetzt tatsächlich noch gar nicht aufgefallen, macht ja aber doch Sinn.
04.02.2019 19:55 Beiträge des Benutzers | zu Buddylist hinzufügen
SharpLat SharpLat ist männlich
myCSharp.de-Mitglied

Dabei seit: 01.02.2019
Beiträge: 4
Entwicklungsumgebung: MS Visual Studio 2017

Themenstarter Thema begonnen von SharpLat

SharpLat ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Vielen Dank, Cavemen, für deine Lösung.
Habe sie direkt mal ausprobiert und sie funktioniert - wie erwartet. ;)


Grüße


SharpLat
04.02.2019 20:56 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 9 Monate.
Der letzte Beitrag ist älter als 9 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 13.11.2019 01:09