none
Radiobuttons - nur als Anzeige RRS feed

  • 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.

    Grüße Andreas

    Dienstag, 11. Juni 2013 09:44

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.


    Dienstag, 11. Juni 2013 11:06

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!


    Dienstag, 11. Juni 2013 09:52
  • 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.


    Dienstag, 11. Juni 2013 09:53
    Moderator
  • 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

    Dienstag, 11. Juni 2013 10:12
  • 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.

    Dienstag, 11. Juni 2013 10:39
    Moderator
  • 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.


    Dienstag, 11. Juni 2013 11:06
  • 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

    Gruß, Andreas

    Dienstag, 11. Juni 2013 11:11