Wechsel der Images auf 5 Buttons, gibt es eine einfachere Möglichkeit als meine?

  • C#

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Duster.

    Wechsel der Images auf 5 Buttons, gibt es eine einfachere Möglichkeit als meine?

    Hallo Leute,

    ich habe in DropDown Menue gebastelt das 5 Buttons und 5 Panels enthät. Bei klick auf einen Button wird das zugehörige Panel angezeigt.
    Auf den 5 Buttons werden die Images von Pfeilen angezeit, Pfeil nach unten wenn das zugehörige Panel angezeigt wird und Pfeil nach rechts wenn das zugehörige Panel nicht angezeigt wird.
    Alles funktioniert.

    Um den Status eines Buttons anzuzeigen nutze ich für jeden Button eine integer Variable die den Status (angeklick und Panel angezeigt/ nich angeklickt Panel nicht angezeigt). Button 1 _cmd01Status bis Button 5 _cmd05Status.

    Meine Frage ist: Gibt es eine einfachere Möglichkeit ohne dass ich 5 Variablen definieren muss, mir kommt das ein wenig unellegant vor?

    Das ist der Code:
    Spoiler anzeigen

    C#-Quellcode

    1. public partial class Form1 : Form
    2. {
    3. private int _cmd01Status = 1;
    4. private int _cmd02Status = 1;
    5. private int _cmd03Status = 1;
    6. private int _cmd04Status = 1;
    7. private int _cmd05Status = 1;
    8. public Form1()
    9. {
    10. InitializeComponent();
    11. FlpMain.AutoScroll = true;
    12. FlpMain.Parent = OuterPanel;
    13. FlpMain.Location = new Point(0, 0);
    14. OuterPanel.Width = FlpMain.Width - SystemInformation.VerticalScrollBarWidth;
    15. OuterPanel.Height = FlpMain.Height - SystemInformation.VerticalScrollBarWidth;
    16. HideSubMenu();
    17. }
    18. private void HideSubMenu()
    19. {
    20. Pnl_01.Visible = false;
    21. Pnl_02.Visible = false;
    22. Pnl_03.Visible = false;
    23. Pnl_04.Visible = false;
    24. Pnl_05.Visible = false;
    25. }
    26. private static void ShowSubMenu(Panel subMenu)
    27. {
    28. if (subMenu.Visible == false)
    29. {
    30. subMenu.Visible = true;
    31. }
    32. else
    33. {
    34. subMenu.Visible = false;
    35. }
    36. }
    37. private static void UpdateButton(Button btn, int clickStatus)
    38. {
    39. switch (clickStatus)
    40. {
    41. case 1:
    42. {
    43. btn.Image = Resources.arrow_right;
    44. break;
    45. }
    46. case -1:
    47. {
    48. btn.Image = Resources.arrow_down;
    49. break;
    50. }
    51. }
    52. }
    53. private void Cmd_01_Click(object sender, EventArgs e)
    54. {
    55. _cmd01Status *= -1;
    56. UpdateButton(Cmd_01, _cmd01Status);
    57. ShowSubMenu(Pnl_01);
    58. }
    59. private void Cmd_02_Click(object sender, EventArgs e)
    60. {
    61. _cmd02Status *= -1;
    62. UpdateButton(Cmd_02, _cmd02Status);
    63. ShowSubMenu(Pnl_02);
    64. }
    65. private void Cmd_03_Click(object sender, EventArgs e)
    66. {
    67. _cmd03Status *= -1;
    68. UpdateButton(Cmd_03, _cmd03Status);
    69. ShowSubMenu(Pnl_03);
    70. }
    71. private void Cmd_04_Click(object sender, EventArgs e)
    72. {
    73. _cmd04Status *= -1;
    74. UpdateButton(Cmd_04, _cmd04Status);
    75. ShowSubMenu(Pnl_04);
    76. }
    77. private void Cmd_05_Click(object sender, EventArgs e)
    78. {
    79. _cmd05Status *= -1;
    80. UpdateButton(Cmd_05, _cmd05Status);
    81. ShowSubMenu(Pnl_05);
    82. }
    83. }
    Spoiler anzeigen


    Das kleine Demoprogramm habe ich angehängt!

    Viele Grüße und bleibt gesund,
    Duster
    Dateien
    • Drop_Down_002.7z

      (87,23 kB, 5 mal heruntergeladen, zuletzt: )

    C#-Quellcode

    1. if (subMenu.Visible == false)
    2. {
    3. subMenu.Visible = true;
    4. }
    5. else
    6. {
    7. subMenu.Visible = false;
    8. }

    ->

    C#-Quellcode

    1. subMenu.Visible != subMenu.Visible;

    Die Statusvariablen selbst z.B. auch als Boolean, dann kannst Du deren Status genauso switchen/negieren.
    Du könntest diese Variablen z.B. in die Tag-Eigenschaft der Buttons stecken, dann brauchst Du keine Zusatzvariablen.
    Aber wenn Panel und Button quasi immer zusammen auftreten, wäre das doch ein Fall für ein UserControl.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed
    Stimmt ein User Control hatte ich auch in Sinn.
    Gibt es dazu vielleicht hier im Forum Tutorials dazu, ich nehm natürlich auch welche aus dem ganzen Netz und selbstverständlich auch Bücher (deutsch/ englisch).
    Die die ich gefunden habe sind sehr advanced SpiderWeb Control etc.!

    Hmmm, die TagEigenschaft sehe ich mir auf jeden Fall an!

    Die Statusvariablen selbst z.B. auch als Boolean, dann kannst Du deren Status genauso switchen/negieren.

    Klar dass ich das auch mit bool Variablen machen kann aber verkürzt wird das ganze dadurch doch nich, nur der Variablentyp wird getauscht, oder?
    Kannst Du ein wenig genauer erklären was Du damit meinst?

    subMenu.Visible != subMenu.Visible;

    Hab ich dich richtig vertsnden, das soll ich statt der If-Abfragen verwenden?
    Da ist ein Fehler drin das funktioniert leider nicht!

    Viele Grüße und bleib gesund,
    Duster

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Duster“ ()

    Mein Fehler:

    C#-Quellcode

    1. subMenu.Visible = !subMenu.Visible;

    Also effektiv: der neue Wert von subMenu.Visible ist das Gegenteil vom bisherigen Wert. So wird aus true eben false und aus false wird true

    Ein UserControl (UC)ist nur ne Kombi aus mehreren Controls, die als solche Kombi immer (wieder) auftreten, bevorzugt auch immer wieder gleich aussehen. Erstell ein UC, hau Dein Button und Dein Panel drauf und wenn Du dann nen EventHandler für den UC-Button erstellst änderst Du darin die Panel-Sichtbarkeit. Wenn Du das kompilierst, kannst Du die mehrere dieser UCs auf's Form hauen und jeder UC-Button kümmert sich quasi automatisch um sein UC-Panel.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.