Kontextmenü: Item in bestimmter Schriftart hinzufügen?

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Kontextmenü: Item in bestimmter Schriftart hinzufügen?

    Hallo allerseits! Mein Programm soll eine Textdatei zeilenweise auslesen und für jede Zeile ein neues DropDownItem im Kontextmenü erstellen – soweit alles kein Problem (siehe Code unten). Nun möchte ich aber, dass die hinzugefügten DropDownItems eine bestimmte Schriftart haben (Courier New). Wie drücke ich das im Code aus? Ich freue mich über jede Hilfe!

    Quellcode

    1. Dim AlleZeilen As Array = File.ReadAllLines("D:\Textdokument.txt", System.Text.Encoding.Default)
    2. For Each Zeile In AlleZeilen
    3. ZeichenToolStripMenuItem.DropDownItems.Add(Zeile)
    4. Next
    Willkommen im Forum.
    Ich bin etwas verwirrt, weil ein ContextMenuStrip keine DropDownItems-Property, sondern eine Items-Property hat. Welches CE verwendest Du?
    Ich nehm jetzt als Beispiel mal einen normalen ContextMenuStrip ausm Designer her, vielleicht reicht das als Beispiel:

    VB.NET-Quellcode

    1. Dim NewTsi As New ToolStripMenuItem
    2. NewTsi.Font = New Font("Courier New", ContextMenuStrip1.Items.Count + 6)
    3. NewTsi.Text = "Item #" & ContextMenuStrip1.Items.Count.ToString
    4. ContextMenuStrip1.Items.Add(NewTsi)
    Da das CMS nicht nur Texte als Parameter für die Add-Methode akzeptiert, sondern auch eben ein (ggf. neues) ToolStripMenuItem, welches man modifizieren kann, sollte das ggf. schon reichen.

    Aber Moment: Wenn alle die gleiche Schrift haben sollen, leg diese doch im Kontextmenü gleich selber fest (Property Font). Dann reicht Dein Code auch schon aus.
    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 Jou.
    @SebaMair Ebenfalls Willkommen im Forum. :thumbup:
    Wenn alle Items denselben Font haben sollen, machst Du das im Designer.
    Sollen die Items unterschiedliche Fonts haben, so musst Du das bei der Erstellung der Items machen (allerdings sieht das belämmert aus).
    Mach das zunächst an einem Beispiel im Designer, dann übernimmst Du den entsprechenden Code aus dem Designer-Code.
    Den findest Du in der FormX.Designer.vb in der Prozedir InitializeComponents().
    =====
    Soll das so was wie eine Font-Auswahl werden?
    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!

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

    Guten Morgen

    Ich finde es sieht gar nicht so schlimm aus.


    Dafür kann man eine einfache Funktion machen

    Freundliche Grüsse

    exc-jdbi

    VB.NET-Quellcode

    1. Dim AlleZeilen() As String = File.ReadAllLines("MenuItems.txt", Encoding.UTF8)
    2. For Each Zeile In AlleZeilen
    3. Me.ContextMenuStrip1.Items.Add(Me.GetNewTSMI(Zeile))
    4. Next
    5. 'Kann auch per Designer zugewiesen werden
    6. Me.ContextMenuStrip = Me.ContextMenuStrip1

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Function GetNewTSMI(data As String) As ToolStripMenuItem
    2. If Not String.IsNullOrEmpty(data) Then
    3. Dim res As New ToolStripMenuItem
    4. Dim len = data.IndexOf(";"c)
    5. Dim name = data.Substring(0, len)
    6. Dim fsize = CSng(data.Substring(len + 2, data.Length - 2 - len - 2))
    7. With res
    8. .Text = name
    9. .Font = New Font(name,
    10. fsize,
    11. FontStyle.Regular,
    12. GraphicsUnit.Point,
    13. CType(0, Byte))
    14. .Size = New System.Drawing.Size(180, 22)
    15. .Name = String.Format("{0}ToolStripMenuItem", name)
    16. End With
    17. Return res
    18. End If
    19. Return Nothing
    20. End Function
    Dateien
    • MenuItems.txt

      (82 Byte, 129 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()

    Ich danke euch für die hilfreichen Antworten, der Code von @VaporiZed löst mein Problem perfekt.
    Das Ganze wird eine Alt-Tabelle für Sonderzeichen: Das Kontextmenü erstellt für jede Zeile einer Textdatei ein Item. Klickt man es an, wird das gewählte Sonderzeichen in die Zwischenablage kopiert. Da neben dem Zeichen auch noch seine Zahlenkombination ([ALT]+<Zahlenkombination> fügt das Zeichen in Windows ein) angezeigt wird, und das mit einer proportionalen Schriftart wie Segoe UI ziemlich krumm aussieht, verwende ich für dieses Untermenü eine Festbreitenschrift (Bild im Anhang). Der Rest des Kontextmenüs soll aber in der Standardschriftart bleiben. :)

    LG, SebaMair
    Bilder
    • Zeichentabelle.JPG

      37,6 kB, 531×263, 65 mal angesehen