2009-11-13 80 views
0

我在WinForms中製作了多語言(計算機語言)記事本。我有一個名爲「Languages」的toolstripmenuitem菜單條(如文件,編輯,查看等)。當你點擊「語言」時,有幾個可檢查的菜單項。我想這樣做:當一個項目被點擊時,它會顯示檢查;當用戶再次點擊它時,它顯示爲未選中狀態。我如何根據java,c,C++等語言來編譯編譯器。C#記事本項目幫助

+5

你的問題不是很清楚,你需要菜單或編譯器列表的幫助嗎? – 2009-11-13 14:33:31

+0

如果可能的話,我希望能夠同時使用這兩種幫助。就像一個名爲Compile的菜單項。 – 2009-11-13 14:35:26

回答

2

你不想檢查,檢查多種語言沒有意義。你需要一個單選按鈕。您可以通過覆蓋菜單條的渲染器來獲得一個。您還需要處理菜單項的CheckedChanged事件,以便只能選擇一個。這個代碼將做的伎倆:

public partial class Form1 : Form { 
    private ToolStripMenuItem[] languages; 
    private bool mBusy; 

    public Form1() { 
     InitializeComponent(); 
     languages = new ToolStripMenuItem[] { javaToolStripMenuItem, cSharpToolStripMenuItem, pythonToolStripMenuItem }; 
     foreach (var language in languages) { 
     language.CheckOnClick = true; 
     language.CheckedChanged += LanguageMenuItem_CheckedChanged; 
     } 
     menuStrip1.Renderer = new MyRenderer(languages); 
    } 

    void LanguageMenuItem_CheckedChanged(object sender, EventArgs e) { 
     if (mBusy) return; 
     mBusy = true; 
     ToolStripMenuItem item = sender as ToolStripMenuItem; 
     foreach (var language in languages) language.Checked = language == item; 
     mBusy = false; 
    } 

    private class MyRenderer : ToolStripProfessionalRenderer { 
     private ToolStripMenuItem[] languages; 
     public MyRenderer(ToolStripMenuItem[] languages) { this.languages = languages; } 

     protected override void OnRenderItemCheck(ToolStripItemImageRenderEventArgs e) { 
     ToolStripMenuItem item = e.Item as ToolStripMenuItem; 
     if (item != null && languages.Contains(item)) 
      RadioButtonRenderer.DrawRadioButton(e.Graphics, e.ImageRectangle.Location, 
      System.Windows.Forms.VisualStyles.RadioButtonState.CheckedNormal); 
     else 
      base.OnRenderItemCheck(e); 
     } 
    } 
    } 
+0

非常感謝。現在有人可以發佈關於如何訪問每種編程語言的編譯器的代碼。 – 2009-11-14 08:42:04

0

你應該有一個設置文件來存儲每個編譯器的路徑/位置。當用戶選擇語言時,您應該獲得所選語言的匹配編譯器的路徑/位置。