2011-02-11 91 views

回答

5

他們是 '正確的' 對齊,你可以看到。 (沒有雙關語意)。

Right

這是一個菜單的默認行爲。您需要自定義繪圖才能以不同方式進行繪製。

2

每個操作系統都有其特殊的外觀和感覺,我想你必須有很好的理由不去承認Windows上的每個其他應用程序的外觀。我想你會放棄這個問題,或者將延長OwnerDrawn項目的菜單。

Here是關於這個問題的矯枉過正的文章。

7

嗯,我想我終於想出瞭如何做到這一點(它讓我困惑了很長一段時間你怎麼得到兩個不同的截圖......)。原來有兩個方式,您可以指示Windows對齊下拉菜單中的快捷鍵。

第一個(可能是最標準的)方法是插入對應的菜單文本字符串中製表符\t)。這產生了原始問題中顯示的底部示例,其中所有標識符都是左對齊的,稍微有些懸垂。這是幾乎所有微軟應用程序的標準,也是我在幾分鐘前才知道的唯一選擇。

          The first option, created using a tab character delimiter, with shortcut key sequences left-aligned          樣品資源字符串:&Print…\tCtrl+P

的第二種方式是,以取代\t轉義序列與\a在資源字符串(是的,奇怪的是會通常表示alert bell)。這導致Windows 對齊菜單中的所有快捷鍵序列,產生第一個屏幕截圖中所示的示例。這確實產生了一個更有效地使用屏幕空間的菜單(它更小),但是這是以每個快捷鍵序列沿左邊距排列整齊對齊爲代價的,我認爲這使得可讀性稍微容易一些。

          The second option, created using an '\a' delimiter, with shortcut key sequences right-aligned          樣品資源字符串:&Print…\aCtrl+P

所以,如果你希望你的菜單看起來像你原來的問題的例子(是的,我容易混淆安排我的樣品倒退了。對不起),您需要在包含菜單項文本字符串的資源文件中用製表符(\t)分隔快捷鍵序列。

奇怪的是,你聲稱使用.NET WinForms,它會自動處理所有這些(使你免受與資源文件混淆的痛苦)。我知道它插入了製表符,而且我見過的所有菜單都生成了看起來就像你的第二個例子。

最好的辦法是將菜單切換到早期版本的.NET Framework附帶的舊MainMenu控件。 (要做到這一點,您可能必須右鍵單擊工具箱並手動添加控件—它在Visual Studio的更高版本中默認不存在)。這將確保您看到您期望的對齊行爲,與記事本等所有標準Windows應用程序一致。它還生成看起來像本地操作系統菜單(在Vista和7中,它們被塗成藍色)的菜單,而不是由MenuStrip控件生成的業餘外觀的自繪菜單,這些菜單在現代版本中完全不適用視窗。

微軟official documentation確實確認該MainMenu control仍然支持以備將來使用,因此沒有理由在您的應用程序使用它害怕。我高度推薦大家用這個來代替:

雖然MenuStrip中替換和添加功能,對以前版本的MainMenu控件,MainMenu的是保留向後兼容,如果您選擇將來使用。

+1

使用AppendMenu(...,「&Open \ aCtrl + O」)時,a(警鈴)不起作用。 ,你知道如何使用'AppendMenu'這個東西(不使用資源文件)嗎? – dns 2014-01-20 10:41:35