2009-11-13 24 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

你应该有一个设置文件来存储每个编译器的路径/位置。当用户选择语言时,您应该获得所选语言的匹配编译器的路径/位置。