2009-11-13 5 views
0

Я делаю блокноты с несколькими языками (компьютерные языки) в WinForms. У меня есть полоска меню с помощью toolstripmenuitem под названием «Языки» (например, файл, редактировать, просматривать и т.д.). Когда вы нажимаете «Языки», есть несколько проверяемых пунктов меню. Я хочу сделать это: когда щелкнут элемент, он будет отмечен флажком; и когда пользователь снова нажимает на него, он не отображается. Как включить компилятор на язык, например, java, c, C++, ect.Помогите с проектом блокнота C#

+5

Ваш вопрос не очень ясен - вам нужна помощь в меню или со списком компиляторов? –

+0

Я хотел бы помочь с обоими, если это возможно. Как элемент меню, называемый Compile. –

ответ

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

Удивительная благодарность. Теперь может кто-нибудь опубликовать код о том, как получить доступ к компиляторам для каждого языка программирования. –

0

у вас должен быть файл настроек, в котором хранится путь/местоположение каждого компилятора. когда пользователь выбирает языки, вы должны получить путь/местоположение выбранного компилятора соответствующего языка.