Editierbare Menüeinträge

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Editierbare Menüeinträge

    Hallo,

    ich habe eine Menüleiste mit dem Menüeintrag "Profile". Darunter gibt es die Punkte "Profil aktualisieren", "Profil speichern unter ..." und "Aktuelles Profil löschen".

    Nun möchte ich, dass, wenn der User auf "Profil speichern unter ..." klickt, ein neuer Menüeintrag als Textbox erscheint. In diese trägt der User den gewünschten Namen ein und bestätigt mit Enter.

    Wenn man aber auf "Profil speichern unter ..." klickt, schließt sich das Menü wieder. Gibt es eine Möglichkeit, ein Menü per Code zu öffnen?

    Ich würde dann folgendermaßen vorgehen:

    Gewünschten Menüpunkt anklicken und dann das Menü wieder öffnen, den Menüeintrag mit der Textbox sichtbar machen und den Fokus hineinsetzen.
    Im Click-Ereignis einen neuen Menüpunkt mit dem eingetragenen Namen erstellen und die Textbox wieder unsichtbar machen.

    Hat jemand eine Idee?

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Bringt es Dir was, beim ProfileToolStripMenuItem im Code die Autoschließen-Eigenschaft auf False zu setzen? Also ProfileToolStripMenuItem.DropDown.AutoClose = False
    In den EventHandlern aller gewünschten anderen Profile-Einträge kannst Du dann ProfileToolStripMenuItem.DropDown.Close() schreiben, um das Menü aktiv zu schließen.
    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.

    tron25 schrieb:

    ein neuer Menüeintrag als Textbox erscheint.
    Ja was nun?
    Soll eine Form mit einer TextBox aufgehen, in die Du was reinschreibst und dann passiert was, wenn diese Form wieder geschlossen wird?
    Soll das Menü einen weiteren Eintrag bekommen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja, es soll ein neuer Menüeintrag mit dem Namen, der eingetragen wurde, erstellt werden. Folgenden Code habe ich schon:

    VB.NET-Quellcode

    1. Private Sub ProfilSpeichernUnterMenue_Click(sender As Object, e As EventArgs) Handles ProfilSpeichernUnterMenue.Click
    2. 'Dieser Menüpunkt ist ein Textfeld und standartmäßig unsichtbar.
    3. NeuesProfilMenue.Visible = True
    4. 'Dadurch, das beim Bestätigen eines Menüpunktes das Menü wieder geschlossen wird, wird es hier wieder geöffnet.
    5. ProfileMenue.DropDown.Show()
    6. NeuesProfilMenue.Focus()
    7. End Sub
    8. Private Sub NeuesProfilMenue_KeyDown(sender As Object, e As KeyEventArgs) Handles NeuesProfilMenue.KeyDown
    9. Select Case e.KeyCode
    10. Case Keys.Escape
    11. 'Hier passiert leider nichts, weil beim Drücken der ESC-Taste das Menü geschlossen wird und daher wohl der Tastendruck nicht mehr ausgewertet wird.
    12. NeuesProfilMenue.Text = "Neues Profil"
    13. NeuesProfilMenue.Visible = False
    14. Case Keys.Enter
    15. If NeuesProfilMenue.Text <> "" Then
    16. Profilname = NeuesProfilMenue.Text
    17. NeuesProfilMenue.Text = "Neues Profil"
    18. NeuesProfilMenue.Visible = False
    19. 'Die folgende Liste beinhaltet alle Profile, die entweder beim Start aus einer Datei gelesen oder über das Menü hinzugefügt wurden.
    20. ProfileListe.Add(Profilname & "," & Links1FrequenzAnzeigeLabel.Text & "," & Links1LautstaerkeanzeigeLabel.Text & "," & Links2FrequenzanzeigeLabel.Text & "," & Links2LautstaerkeanzeigeLabel.Text & "," & Links3FrequenzanzeigeLabel.Text & "," & Links3LautstaerkeanzeigeLabel.Text & "," & Links4FrequenzanzeigeLabel.Text & "," & Links4LautstaerkeanzeigeLabel.Text & "," & Links5FrequenzanzeigeLabel.Text & "," & Links5LautstaerkeanzeigeLabel.Text & "," & Rechts1FrequenzanzeigeLabel.Text & "," & Rechts1LautstaerkeanzeigeLabel.Text & "," & Rechts2FrequenzanzeigeLabel.Text & "," & Rechts2LautstaerkeanzeigeLabel.Text & "," & Rechts3FrequenzanzeigeLabel.Text & "," & Rechts3LautstaerkeanzeigeLabel.Text & "," & Rechts4FrequenzanzeigeLabel.Text & "," & Rechts4LautstaerkeanzeigeLabel.Text & "," & Rechts5FrequenzanzeigeLabel.Text & "," & Rechts5LautstaerkeanzeigeLabel.Text)
    21. 'Diese Funktion löscht alle Profileinträge und füllt sie anhand der Tabelle wieder auf.
    22. ProfileInMenueleisteEintragen()
    23. 'Jetzt wird das letzte Profil angehakt.
    24. ProfileMenue.DropDownItems.OfType(Of ToolStripMenuItem).ElementAt(ProfileMenue.DropDownItems.OfType(Of ToolStripMenuItem).Count - 1).Checked = True
    25. Profilindex = ProfileListe.Count - 1
    26. End If
    27. ProfileMenue.DropDown.Close()
    28. End Select
    29. End Sub

    Das hinzufügen eines neuen Menüeintrages funktioniert. Beim Bestätigen des Namens ertönt lediglich ein Fehlerton, ohne einen Fehler anzuzeigen. Das Programm läuft normal weiter. Außerdem springt er leider nicht in den entsprechenden Select-Zweig, wenn die ESC-Taste gedrückt wird. Zu guter Letzt gibt es noch ein Problem, welches etwas trickier ist. Ich arbeite mit einem Screenreader. Wenn ich also den Menüpunkt "Profil speichern unter ..." auswähle, springt der Cursor zwar in das Eingabefeld, aber die Sprachausgabe gibt mir nur "Werkzeugleiste" als Stimme und auch auf der Braillezeile wieder. Dieses Problem ist aber wahrscheinlich zu speziell. Darum werde ich mich später kümmern müssen.

    Meine Fragen wären:
    Wie kann ich in einem Textfeld einer Menüleiste die ESC-Taste abfangen?
    Gibt es eine elegantere Möglichkeit, als das Menü sich schließen zu lassen und dann wieder zu öffnen.

    tron25 schrieb:

    Ja, es soll ein neuer Menüeintrag mit dem Namen, der eingetragen wurde, erstellt werden
    Wenn es GENAU ein Eintrag werden soll, kannst Du ihn ja im Designer anlegen, .Visible = False schalten und bei Bedarf umbenennen und .Visible = True schalten.
    Das ließe sich sicherlich auch mit 10 Einträgen oder so einfach realisieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So, jetzt habe ich mich entschlossen, ein zusätzliches kleines Formular mit einem Eingabefeld, einem OK- und einem ABBrechen-Button zu machen. Allein schon, weil ich sonst noch größere Probleme mit dem Eingabefeld als Menüeintrag habe, wenn ich beispielsweise ein Profil umbenennen möchte.

    Vielen Dank für eure Hilfe und Ideen.

    tron25 schrieb:

    wie ich es abfangen kann
    Was ist "es"?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Entsprechend dem Rest des Satzes ist »es« = die Situation,

    tron25 schrieb:

    wenn man ESC drückt.

    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.