2012-02-08 14 views
6

Nel mio .net windows form (sto usando XP Pro SP3 e VS 2010), ho creato un menustrip. Nel menustrip ci sono diverse voci di menu, ognuna con un menu a discesa. Le voci di menu nei menu a discesa hanno ciascuna un'icona con del testo. Voglio rendere il menu più compatto riducendo lo spazio orizzontale tra l'icona e il testo. (Ho aggiunto una freccia rossa all'immagine per mostrare lo spazio di cui sto parlando).Diminuisci lo spazio tra l'icona di un elemento di menu e il suo testo

enter image description here

Finora, ho impostato l'imbottitura di tutti i menuitems a 0, ma questo sembra solo per influenzare la spaziatura verticale tra una voce di menu e l'altra.

voglio usare il sistemarendermodeper il MenuStrip (anche se il problema persiste, non importa quello che rendermode che uso. Le icone del menu sono 16x16, e hanno la proprietà sizetofit.

La cosa divertente è che lo stesso spazio è proprio come lo voglio nello menustrip - l'icona è proprio accanto al testo

Questo rimuoverà completamente il margine dell'immagine, ma rimuove anche le immagini, voglio solo cambiare la larghezza del margine dell'immagine

For Each menuItem As ToolStripMenuItem In menu_main.Items 
     DirectCast(menuItem.DropDown, ToolStripDropDownMenu).ShowImageMargin = False 
    Next 

Cosa posso fare qui?

+0

Proprio come un a parte, non è una buona idea per personalizzare idiomi UI stabiliti in questo modo. So che Microsoft stessa fa tutto il tempo ma è molto meglio aderire agli standard dell'interfaccia utente del sistema operativo in merito. –

+0

@Konrad Rudolph In generale, sono d'accordo con te. In effetti, mi piace molto il look XP dei menu, e preferisco lasciarlo in pace, ma il menu che VS mi dice è che il rendering del sistema non assomiglia ai menu a discesa di altri programmi. C'è quasi un quarto di pollice di spazio tra l'icona e il testo. Non è così altrove, ad eccezione di Microsoft Office. La spaziatura dovrebbe essere di circa un sedicesimo o un ottavo al massimo. – bgmCoder

+0

Ah, ricordo: sembra come se fosse l'area per le checkbox (che può esistere nei menu). Ti sei assicurato che non ci sia un'opzione per disabilitare questo comportamento, piuttosto che modificare il disegno? Non ho lavorato con .NET in un bel po 'di tempo, non riesco a ricordare se questo esiste o no. –

risposta

2

Quindi, questo è un po 'imbroglio, e probabilmente non apparirà pulito come vorresti, ma sono stato in grado di farlo rendendo l'immagine con il testo e quindi impostando le seguenti proprietà nel designer per la voce di menu:

DisplayStyle = Image

ImageScaling = None

enter image description here

+0

Ti ho dato il mio +1 per la creatività. Questa è una soluzione reale! Tuttavia, rimuove la possibilità per il testo dinamico nelle voci di menu e rende difficile riutilizzare le icone per altri scopi. Non ero proprio speranzoso, ma una soluzione ammirevole. – bgmCoder

Problemi correlati