Richtige Zentrierung eines MenuStrips in der Mitte des Bildschirms

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

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Developement.

    Richtige Zentrierung eines MenuStrips in der Mitte des Bildschirms

    Hallo,
    ich möchte das schon durch den Designer richtig zentrierte MenuStrip jetzt zusätzlich noch per Code
    immer genau in der Mitte des Bildschirms haben. Möchte also die X-Koordinate ändern, die Y soll jedoch so bleiben, wie im Designer.
    Habe es schon mit diesem Code versucht, hat aber nicht geklappt:

    VB.NET-Quellcode

    1. MenuStrip1.Location.X = Me.Width / 2


    Fehlermeldung:

    Quellcode

    1. Fehler BC30068 Der Ausdruck ist ein Wert und kann nicht als Ziel einer Zuweisung verwendet werden.
    Update: Habe es jetzt so geregelt, dass ein Label mittig sein muss.
    Habe auch durch Selbstexperimentieren einen guten Code gefunden:

    VB.NET-Quellcode

    1. Label1.Location = New Point(Me.Width / 2, Label1.Location.Y)


    Ein Problem ist mit dem Code aber noch.
    Der Text ist nicht direkt in der Mitte. Der Text fängt genau an dem Punkt der Mitte an, ich möchte aber dass
    die Mitte des Textes die Mitte der Breite ist. Sprich, der Code geht schon, der Text muss aber mittig ausgelegt werden,
    damit wie oben beschrieben die Mitte vom Text = Mitte der Breite. Hab's schon mit TextAlign probiert und zwar mit TextAlign = MiddleCenter.
    Hat aber nicht's bewirkt. Was kann ich tun?
    Hi. Du musst nicht nur Denn MenuStrip durch 2 nähmen sondern auch den Label durch 2 und das denn noch minus rechnen.
    MfG, Martin

    mrMo schrieb:

    Zieh halt was von der Breite ab...

    Hab jetzt mal so:

    VB.NET-Quellcode

    1. Label1.Location = New Point(Me.Width / 2 - Label1.Text.Length, Label1.Location.Y)

    Das nützt aber trotzdem nichts, da ja die Länge des Texts ja nicht wirklich proportional zu der allgemeinen Angabe dieser Breite ist.
    Was kann ich sonst noch unternehmen?

    Sieber Max Produktion schrieb:

    Du musst nicht nur Denn MenuStrip durch 2 nähmen sondern auch den Label durch 2 und das denn noch minus rechnen.
    Das verstehe ich irgendwie nicht :/Also zumindest wie soll ich das Label durch 2 nehmen?
    Ich mach das jetzt mal so mit meinen angaben als beispiel:

    VB.NET-Quellcode

    1. Dim Int01 As Integer = MeneStrip1.location.x
    2. Dim Int02 As Integer = Label1.location.x
    3. Dim Int03 As Integer = 0
    4. Int01 /= 2
    5. Int02 /= 2
    6. Int03 = Int01
    7. Int03 -= Int02
    8. Label1.Location = New Point(Int03, Label1.Location.Y)


    Hab jetzt Visual Studio nicht offen. Aber das müste gehen
    Ps. Sry für die Späte Antwort

    EDIT: Du kannst auch ​Int03 weglassen weis aber nicht ob du noch den halben wert von ​Int01 brauchst.
    MfG, Martin
    Kannst du mir mal denn code schicken der angibt wie das Zentriert werden soll? Dann kann ich dir das mit dein Steuer Elementen zeigen. Weil ich denke so wie eben verstehst du mich nicht.
    MfG, Martin
    @Sieber Max Produktion mit deinem Code:

    VB.NET-Quellcode

    1. Dim Int01 As Integer = SongTitleLabel.Location.X
    2. Dim Int02 As Integer = 0
    3. Int01 /= 2
    4. Int02 -= Int01
    5. SongTitleLabel.Location = New Point(Int02, SongTitleLabel.Location.Y)


    Mit meinem Code:

    VB.NET-Quellcode

    1. ​ SongTitleLabel.Location = New Point(Me.Width / 2 - SongTitleLabel.Text.Length, SongTitleLabel.Location.Y)
    Okay... also soll SongTitleLabel in der Mitte sein. und dies liegt auf welchen Control? Weil das was du mit mein Code gemacht hast ergibt kein sin.

    EDIT: Das ist wichtig mit denn Control da dies noch gebraucht wird.
    MfG, Martin

    Developement schrieb:

    Es ist ein Label

    Nein :P auf welchen Control er liegt. z.B. Der eigenen Form / Panel ich gehe jetzt mal von der Form aus.

    VB.NET-Quellcode

    1. 'Erst alle Dims:
    2. Dim int1 As Integer = Me.size.x ' Da ändern wen es jetzt z.B. Panel1 ist
    3. Dim int2 As Integer = SongTitleLabel.size.x ' Das bitte so lassen!
    4. Dim int3 As Integer = 0 ' Auch so lassen!
    5. 'Jetzt die Rechnung (Hier nichts ändern):
    6. int1 /= 2
    7. int2 /= 2
    8. int3 = int1
    9. int3 -= int2
    10. 'Und jetzt wird die Location von SongTitleLabel geändert, das bitte auch so lassen.
    11. SongTitleLabel.location = New Point(int3, SongTitleLabel.location.y)


    So müsste es gehen ;) und nichts ändern außer Me wen du etwas anderes benutzt wie z.B. ein Panel
    MfG, Martin
    Dann machst du es bei int1 so:

    VB.NET-Quellcode

    1. ​Dim int1 As Integer = Panel1.size.x


    Hoffe ich konnte dir helfen. Wenn das nicht funktioniert in ich überfragt.
    MfG, Martin
    @Developement Point hat x und y, Size hat Width und Height.
    Solltest Du allerdings alleine rauskriegen, ohne Forum oder www.
    Gib ein Panel1.Size PUNKT (.) LEERZEICHEN ( ) und lass Dir von der IDE helfen.
    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!
    <p>@'Development' Sry mein fehler meinte nicht .x sondern .<span style="background-color:rgb(252, 253, 254); color:rgb(0, 0, 0); font-family:trebuchet ms,arial,sans-serif">Width.</span></p>

    EDIT: Lol O_o was ist das denn?! Meinte: .Widht statt .x
    MfG, Martin