Benutzer mit den meisten Antworten
Radiobuttons - nur als Anzeige

Frage
-
Nur Anzeige - Enable ist es nicht
Hallo,
ich möchte eine Gruppe (5 Radiobuttons) nur als Anzeige verwenden.
Nicht grau. Von außen setzen. Über Maus sollte es nicht zu aktivieren sein.
Wie kann ich das erreichen? MausEvent irgendwie abfangen?
Danke fürTipps.
Antworten
-
Hallo Andreas,
bei WinForms haben die RadioButtons eine Eigenschaft AutoCheck. Wenn du diese auf false setzt bekommst du dein gewünschtes Verhalten: die RadioButtons sehen aktiv aus, lassen sich aber nicht durch den Benutzer sondern nur noch durch Code verändern.
Optimal ist so ein Verhalten im Sinne der Benutzerführung aber nicht da es so aussieht als ob man hier etwas machen könnte. Ich kann verstehen das der Status so besser zu sehen als wenn die Controls einfach disabled sind, vielleicht findest du aber noch eine bessere Möglichkeit den Status anzuzeigen (z.B. über ein Label) die für dich geeignet ist?
[Edit] Ich seh gerade erst das Koopa bereits den gleichen Hinweis zur Benutzerführung gegeben hat. Dann will ich das einfach nur noch mal bekräftigt haben.
Zumal ich Radiobuttons für Anzeigezwecke auch unpraktisch finde: sie nehmen viel mehr Platz weg da immer alle möglichen Status auf dem Bildschirm zu sehen sind. Der Benutzer muss genauer hinschauen um zu sehen was gerade Sache ist. Ein Label müsste nur den aktuellen (und in der Regel auch einzig interessanten) Status anzeigen.
- Als Antwort markiert Andreas Bauer2 Dienstag, 11. Juni 2013 11:09
- Bearbeitet André Pönisch Dienstag, 11. Juni 2013 11:17
Alle Antworten
-
Hallo Andreas Bauer2,
was spricht denn gegen das Standardverhalten? (disablen der Controls). Setzten kannst du den Status programmatisch trotzdem, und du musst keinen Zirkus anfangen und irgendwelches Verhalten abseits des Windows-Standards implementieren. Erfahrungsgemäß ist das in ca. 99% aller Fälle sowieso ein Schuss ins Knie!
- Bearbeitet Holger M. Rößler Dienstag, 11. Juni 2013 09:53
-
Hallo, wenn du es vermeiden möchtest IsEnabled zu nutzen, dann kannst du beispielsweise CheckedChanged (Checked und Unchecked für WPF) abfangen und entsprechend abbrechen:
RadioButton btnLast = null;//Der ztu setzende RB bool isChangingAllowed = true;//Auf False setzen um die RB bearbeiten zu können private void radioButton_CheckedChanged(object sender, EventArgs e) {
if(!isChangingAllowed) return;// if ((sender as RadioButton) != btnLast)//RB ist nicht der gesetzte {
isChangingAllowed = true;//StackOverflow vermeiden (sender as RadioButton).Checked = false;//Unchecken btnLast.Checked = true;//Alten RB wieder setzen
isChangingAllowed = false; } }Die Methode musst du als Ereignishandler für das CheckChanged-Ereignis von jedem RadioButton eintragen. In WPF musst du das Checked-Event nutzen. (Geht ggf. auch mit Unchecked).
Wenn du nun im Code den Status ändern willst, must du dafpür sorgen, das die Ebvents nicht mehr ausgelöst werden. Das geht indem du sie deabbonnierst oder einen bool-Wert änderst, der vor beginn ggf. die Methode gleich wieder beendet.
if(!isChangingAllowed) return;
Sonderlich schön finde ich das jedoch nicht, weil der Benutzer dadurch nicht sehen kann das er die Controls eigentlichn nicht benutzen kann. Schöner fände ich es wenn du es üer ein Label o.ä. löst. Da sieht der Benutzer die Informationen und weiß das er nichts daran ändern kann.
<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets | Twitter
Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
Einen Konverter zwischen C# und VB.NET Code gibt es hier.- Bearbeitet Tom Lambert (Koopakiller)Moderator Dienstag, 11. Juni 2013 10:47 Codeergänzung
-
Hallo,
ja schön ist es nicht.
Holger hat auch Recht, ist gegen den Standard.
Aber was müsste ich tun, um MouseDownLeft , Up
für bestimmte Controls einfach zu ignorieren. Das wäre einfach, wenn man weiß wie.
Die WinForm und da die Controls suchen, oder?
rBNo1 || rBNo2 || rBNo3 || rBNo4 || rBNo5
cancel !?!
Grüße Andreas
-
Gucke dir mal meine Methode an. Du musst nicht auf die tiefste Ebene zurück gehen. Fange einfach die Statusänderung ab und setze es wieder zurück.
Da bei einer Änderung das geänderte Control im sender steht, kannst dieses zurück setzen. Der RadioButton, der gesetzt sein soll, der wird im CodeBehind gespeichert. So ist das am einfachsten.
<Code:13/> - Koopakiller [kuːpakɪllɐ]
Webseite | Code Beispiele | Facebook | Snippets | Twitter
Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.
Einen Konverter zwischen C# und VB.NET Code gibt es hier. -
Hallo Andreas,
bei WinForms haben die RadioButtons eine Eigenschaft AutoCheck. Wenn du diese auf false setzt bekommst du dein gewünschtes Verhalten: die RadioButtons sehen aktiv aus, lassen sich aber nicht durch den Benutzer sondern nur noch durch Code verändern.
Optimal ist so ein Verhalten im Sinne der Benutzerführung aber nicht da es so aussieht als ob man hier etwas machen könnte. Ich kann verstehen das der Status so besser zu sehen als wenn die Controls einfach disabled sind, vielleicht findest du aber noch eine bessere Möglichkeit den Status anzuzeigen (z.B. über ein Label) die für dich geeignet ist?
[Edit] Ich seh gerade erst das Koopa bereits den gleichen Hinweis zur Benutzerführung gegeben hat. Dann will ich das einfach nur noch mal bekräftigt haben.
Zumal ich Radiobuttons für Anzeigezwecke auch unpraktisch finde: sie nehmen viel mehr Platz weg da immer alle möglichen Status auf dem Bildschirm zu sehen sind. Der Benutzer muss genauer hinschauen um zu sehen was gerade Sache ist. Ein Label müsste nur den aktuellen (und in der Regel auch einzig interessanten) Status anzeigen.
- Als Antwort markiert Andreas Bauer2 Dienstag, 11. Juni 2013 11:09
- Bearbeitet André Pönisch Dienstag, 11. Juni 2013 11:17
-
bei WinForms haben die RadioButtons eine Eigenschaft AutoCheck. Wenn du diese auf false setzt bekommst du dein gewünschtes Verhalten: die RadioButtons sehen aktiv aus, lassen sich aber nicht durch den Benutzer sondern nur noch durch Code verändern.
Hallo André,
ja stimmt. Muss man mal gemacht haben.
http://msdn.microsoft.com/de-de/library/system.windows.forms.radiobutton.autocheck%28v=vs.90%29.aspx