Verwenden von WinForms; Gibt es eine bessere Möglichkeit, den aktivierten RadioButton für eine Gruppe zu finden? Es scheint mir, dass der folgende Code nicht notwendig sein sollte. Wenn Sie einen anderen RadioButton aktivieren, weiß dieser, welcher deaktiviert werden muss. Daher sollte er wissen, welcher aktiviert ist. Wie kann ich diese Informationen abrufen, ohne viele if-Anweisungen (oder einen Schalter) auszuführen?
RadioButton rb = null;
if (m_RadioButton1.Checked == true)
{
rb = m_RadioButton1;
}
else if (m_RadioButton2.Checked == true)
{
rb = m_RadioButton2;
}
else if (m_RadioButton3.Checked == true)
{
rb = m_RadioButton3;
}
c#
.net
winforms
radio-button
Billy
quelle
quelle
Antworten:
Sie könnten LINQ verwenden:
Beachten Sie, dass sich dazu alle Optionsfelder direkt im selben Container befinden müssen (z. B. Bedienfeld oder Formular) und dass sich nur eine Gruppe im Container befindet. Wenn das nicht der Fall ist, könnten Sie machen
List<RadioButton>
in Ihrem Konstruktor für jede Gruppe s erstellen und dann schreibenlist.FirstOrDefault(r => r.Checked)
.quelle
s.FirstOrDefault
stattlist.FirstOrDefault
im zweiten Absatz Ihrer Antwort sein?s
ist eine Pluralisierung, kein Variablenname.Sie können die CheckedEvents aller Schaltflächen mit einem Handler verbinden. Dort können Sie leicht das richtige Kontrollkästchen erhalten.
quelle
Für diejenigen ohne LINQ:
quelle
Das OP wollte den überprüften RadioButton BY GROUP erhalten. Die Antwort von @SLaks ist zwar ausgezeichnet, beantwortet aber nicht wirklich die Hauptfrage des OP. Um die Antwort von @SLaks zu verbessern, gehen Sie einfach noch einen Schritt weiter.
Hier ist ein Beispiel aus meinem eigenen Arbeitscode. Gemäß normalem WPF sind meine RadioButtons in a enthalten
Grid
(mit dem Namen "myGrid") zusammen mit einer Reihe anderer Steuerelementtypen enthalten. Ich habe zwei verschiedene RadioButton-Gruppen im Grid.So erhalten Sie den aktivierten RadioButton von einer bestimmten Gruppe:
Wenn in Ihrem Code möglicherweise keine RadioButtons aktiviert sind, verwenden Sie
SingleOrDefault()
(Wenn ich keine Drei-Status-Schaltflächen verwende, habe ich immer eine Schaltfläche "IsChecked" als Standardauswahl festgelegt.)quelle
.Where(r => r.GroupName == "GroupName" && r.IsChecked == true)
weilr.IsChecked
ist nullable bool Eigenschaft.Sie können das CheckedChanged- Ereignis für alle Ihre RadioButtons verwenden.
Sender
werden die deaktivierten und aktivierten RadioButtons sein.quelle
Sie können eine Erweiterungsmethode verwenden, um die Parent.Controls-Auflistung von RadioButton zu iterieren. Auf diese Weise können Sie andere RadioButtons im gleichen Bereich abfragen. Mit zwei Erweiterungsmethoden können Sie die erste verwenden, um festzustellen, ob RadioButtons in der Gruppe ausgewählt sind, und dann die zweite verwenden, um die Auswahl zu erhalten. Das RadioButton-Tag-Feld kann verwendet werden, um eine Aufzählung zur Identifizierung jedes RadioButton in der Gruppe zu speichern:
Hier ist ein typisches Verwendungsmuster:
quelle
Zusätzlich zur CheckedChangedEvent-Verkabelung könnte man die Controls-Eigenschaft "Tag" verwenden, um zwischen den Optionsfeldern zu unterscheiden. Eine (Spaghetti-Code-) Alternative wäre die Eigenschaft "TabIndex"; P.
quelle
Manchmal vermisse ich in solchen Situationen meine Jugend, als Access mein Gift der Wahl war, und ich konnte jedem Optionsfeld in einer Gruppe seinen eigenen Wert geben.
Mein Hack in C # besteht darin, das Tag zum Festlegen des Werts zu verwenden. Wenn ich eine Auswahl aus der Gruppe treffe, lese ich den Wert des Tags des ausgewählten Radiobutton. In diesem Beispiel ist directionGroup die Gruppe, in der ich vier fünf Optionsfelder mit "Keine" und "NE", "SE", "NW" und "SW" als Tags auf den anderen vier Radiobuttons habe.
Ich habe proaktiv eine Schaltfläche verwendet, um den Wert der aktivierten Schaltfläche zu erfassen, da das Zuweisen eines Ereignishandlers zu allen CHeckCHanged-Ereignissen aller Schaltflächen dazu führt, dass JEDE Schaltfläche ausgelöst wird, da durch Ändern einer Schaltfläche alle geändert werden. Der Wert des Absenders ist also immer der erste RadioButton in der Gruppe. Stattdessen verwende ich diese Methode, wenn ich herausfinden möchte, welche ausgewählt ist, mit den Werten, die ich in der Tag-Eigenschaft jedes RadioButton abrufen möchte.
Zu Ihrer Information, ich habe dies getestet und in meiner Arbeit verwendet.
Joey
quelle
Wenn Sie die Auswahl in einer Datei oder einer anderen Datei speichern und später aufrufen möchten, klicken Sie hier
dann nenne es mit
quelle
Wenn Sie den Index des ausgewählten Optionsfelds in einem Steuerelement abrufen möchten, können Sie folgende Methode verwenden:
Anwendungsbeispiel:
Der Code ist nicht so gut getestet, aber es scheint, dass die Indexreihenfolge von links nach rechts und von oben nach unten ist, wie beim Lesen eines Textes. Wird kein Optionsfeld gefunden, gibt die Methode -1 zurück.
Update: Es stellte sich heraus, dass mein erster Versuch nicht funktioniert hat, wenn sich kein Optionsfeld im Steuerelement befindet. Ich habe einen Try-and-Catch-Block hinzugefügt, um das zu beheben, und die Methode scheint jetzt zu funktionieren.
quelle
Die GroupBox verfügt zu diesem Zweck über ein validiertes Ereignis, wenn Sie WinForms verwenden.
quelle
Für Entwickler, die VB.NET verwenden
quelle