Benutzer mit den meisten Antworten
TextAlign und .Width bei DropDownItems eines ToolStripMenuItems

Frage
-
Bei mir reagiert VB 2010 in DropDownItems weder auf .TextAlign = ContentAlignment.MiddleLeft (Text wird dennoch immer oben angezeigt !) noch auf ein .width= (DropDownItems werden immer in der Breite des längsten Textes + Paddings gezeigt, aber nicht in der gewünschten Breite !) Bei der oberen Ebene ToolStripMenuItem geht es einwandfrei ! Warum ? Bitte um Hilfe
Herzlichen Dank im Voraus
Alex G.Hier Auszug der Menü-Init Routine
' Das DocMenü einlesen Try DataReader = sqlQuery(cmdData, "SELECT * from Menu order by Sort") Do While DataReader.Read() Dim MenuItem As New ToolStripMenuItem("New", Nothing, New EventHandler(AddressOf DocMenu_Click)) Select Case DataReader("Ebene") Case 1 ' Neues Hauptmenü DocMenu.Items.Add(MenuItem) If Not IsDBNull(DataReader("BackgroundImage")) Then MenuItem.BackgroundImage = System.Drawing.Bitmap.FromFile(RunPath & DataReader("BackgroundImage")) MenuItem.BackgroundImageLayout = ImageLayout.Stretch End If If Not IsDBNull(DataReader("Image")) Then MenuItem.Image = System.Drawing.Bitmap.FromFile(RunPath & DataReader("Image")) MenuItem.ImageAlign = ContentAlignment.MiddleCenter MenuItem.ImageScaling = ToolStripItemImageScaling.SizeToFit MenuItem.ImageTransparentColor = Color.White End If MenuItem.AutoSize = False MenuItem.Height = 40 MenuItem.TextAlign = ContentAlignment.MiddleLeft MenuItem.Text = DataReader("Text") MenuItem.Font = New System.Drawing.Font("Segoe UI", 12, FontStyle.Bold) xMainItem = MenuItem Case 2 ' Neues Submenu erste Ebene xMainItem.DropDownItems.Add(MenuItem) If Not IsDBNull(DataReader("BackgroundImage")) Then MenuItem.BackgroundImage = System.Drawing.Bitmap.FromFile(RunPath & DataReader("BackgroundImage")) MenuItem.BackgroundImageLayout = ImageLayout.Stretch End If If Not IsDBNull(DataReader("Image")) Then MenuItem.Image = System.Drawing.Bitmap.FromFile(RunPath & DataReader("Image")) MenuItem.ImageAlign = ContentAlignment.MiddleCenter MenuItem.ImageScaling = ToolStripItemImageScaling.SizeToFit MenuItem.ImageTransparentColor = Color.White End If MenuItem.AutoSize = False MenuItem.Height = 40 MenuItem.Width = 300 MenuItem.TextAlign = ContentAlignment.MiddleLeft MenuItem.Text = DataReader("Text") MenuItem.Font = New System.Drawing.Font("Arial", 10, FontStyle.Bold) xSub1Item = MenuItem End Select Loop sqlClose(DataReader) Catch ex As Exception Fehler("Fehler bei Behandlungs-Menü einlesen: " & vbCrLf & "Meldung: " & ex.Message, My.Application.Info.ProductName) Me.Close() End Try
- Bearbeitet Thorsten DörflerModerator Dienstag, 5. Oktober 2010 12:46 Codeformatierung
Antworten
-
Am 05.10.2010 14:01, schrieb Alex Gielczynski:
Bei mir reagiert VB 2010 in DropDownItems weder auf .TextAlign = ContentAlignment.MiddleLeft (Text wird dennoch immer oben angezeigt !)
Die Ausrichtung des Texts lässt sich bei einem DropDown bzw. MenuItem nicht beeinflussen. Ob das ein Bug ist oder nur der Hinweis in der Dokumentation fehlt, kann ich nicht beurteilen. Workaround wäre wohl, den Eintrag selber zu zeichnen.
noch auf ein .width= (DropDownItems werden immer in der Breite des längsten Textes + Paddings gezeigt, aber nicht in der gewünschten Breite !)
Die Breite des DropDown wird by default automatisch ermittelt (AutoSize = True). Über die DropDown Eigenschaft kannst Du auf das zuständige DropDown zugreifen und die gewünschten Einstellungen vornehmen:
MainMenuItem.DropDown.AutoSize = False MainMenuItem.DropDown.Width = 150 MainMenuItem.DropDown.Height = 20
Beachte, dass Du sowohl Breite, wie auch Höhe manuell festlegen musst, wenn Du AutoSize auf False setzt.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 5. Oktober 2010 16:54
Alle Antworten
-
Am 05.10.2010 14:01, schrieb Alex Gielczynski:
Bei mir reagiert VB 2010 in DropDownItems weder auf .TextAlign = ContentAlignment.MiddleLeft (Text wird dennoch immer oben angezeigt !)
Die Ausrichtung des Texts lässt sich bei einem DropDown bzw. MenuItem nicht beeinflussen. Ob das ein Bug ist oder nur der Hinweis in der Dokumentation fehlt, kann ich nicht beurteilen. Workaround wäre wohl, den Eintrag selber zu zeichnen.
noch auf ein .width= (DropDownItems werden immer in der Breite des längsten Textes + Paddings gezeigt, aber nicht in der gewünschten Breite !)
Die Breite des DropDown wird by default automatisch ermittelt (AutoSize = True). Über die DropDown Eigenschaft kannst Du auf das zuständige DropDown zugreifen und die gewünschten Einstellungen vornehmen:
MainMenuItem.DropDown.AutoSize = False MainMenuItem.DropDown.Width = 150 MainMenuItem.DropDown.Height = 20
Beachte, dass Du sowohl Breite, wie auch Höhe manuell festlegen musst, wenn Du AutoSize auf False setzt.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 5. Oktober 2010 16:54
-
Herzlichen Dank Thorsten !
Nun funzt es Bestens !Breite wird nun exakt an der Breite des Items selbst ausgerichtet, Hatte ItemDropDown nie betrachtet !
Die Höhe orientiert sich beim Weglassen anscheinend automatisch an der Textgröße und das .TextAlign=MiddleLeft geht halt eben bei DropDown nicht.Hier für Alle, die es interessiert, die Sub mit der ich bei Größenänderungen des Users die Items und DropDowns darin über eine vorgegebene Breite aufteile:
Private Sub SetMenuItemWidth(ByVal thismenu As MenuStrip) Dim count As Integer = thismenu.Items.Count Dim myWidth As Integer = 0 If count > 0 Then myWidth = (Panel_Selection.Width - count) / count For Each item As ToolStripMenuItem In thismenu.Items myWidth = (Panel_Selection.Width - count) / count item.Width = myWidth If item.HasDropDownItems Then item.DropDown.AutoSize = False item.DropDown.Width = myWidth For Each subitem As ToolStripMenuItem In item.DropDownItems subitem.AutoSize = False subitem.Width = myWidth Next subitem End If Next item End If End Sub
- Bearbeitet Robert BreitenhoferModerator Dienstag, 5. Oktober 2010 16:53 Formatierung