Eine einfache Möglichkeit ist, die kürzeren Menüpunkte zu entfernen. Zum Beispiel Pad die Text-Eigenschaft des „Neu“ Menüpunkt „New “ zu sein, so dass es alle zusätzlichen Leerzeichen am Ende hat und das wird umwerfen Die Abkürzung.
aktualisieren
Ich schlug vor, dies um Ihnen zu helfen in Code zu automatisieren. Hier ist das Ergebnis der Vermietung den Code die Arbeit für Sie:

Ich schrieb den folgenden Code, den Sie, dass die Hauptmenüpunkte durch alle unter der Menüleiste gehen aufrufen können und die Größe, die alle Menüpunkte :
// put in your ctor or OnLoad
// Note: the actual name of your MenuStrip may be different than mine
// go through each of the main menu items
foreach (var item in menuStrip1.Items)
{
if (item is ToolStripMenuItem)
{
ToolStripMenuItem menuItem = (ToolStripMenuItem)item;
ResizeMenuItems(menuItem.DropDownItems);
}
}
Und das sind die Methoden, die die Arbeit machen:
private void ResizeMenuItems(ToolStripItemCollection items)
{
// find the menu item that has the longest width
int max = 0;
foreach (var item in items)
{
// only look at menu items and ignore seperators, etc.
if (item is ToolStripMenuItem)
{
ToolStripMenuItem menuItem = (ToolStripMenuItem)item;
// get the size of the menu item text
Size sz = TextRenderer.MeasureText(menuItem.Text, menuItem.Font);
// keep the longest string
max = sz.Width > max ? sz.Width : max;
}
}
// go through the menu items and make them about the same length
foreach (var item in items)
{
if (item is ToolStripMenuItem)
{
ToolStripMenuItem menuItem = (ToolStripMenuItem)item;
menuItem.Text = PadStringToLength(menuItem.Text, menuItem.Font, max);
}
}
}
private string PadStringToLength(string source, Font font, int width)
{
// keep padding the right with spaces until we reach the proper length
string newText = source;
while (TextRenderer.MeasureText(newText, font).Width < width)
{
newText = newText.PadRight(newText.Length + 1);
}
return newText;
}
mit dieser Das Problem ist, dass es schwierig ist requ die Anzahl der Räume, um zu bestimmen in einer Schriftart ohne feste Breite - es ist nicht so einfach wie die Länge der Zeichenfolge. +1 trotzdem. – casablanca
Werfen Sie einen Blick auf mein Update, @casablanca. –
Danke, ich akzeptiere diese Antwort - ich wollte wirklich nicht mit 'MeasureText' enden, aber ich konnte keinen besseren Weg finden. – casablanca