Помогите с проектом C # notepad - PullRequest
0 голосов
/ 13 ноября 2009

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

Ответы [ 2 ]

2 голосов
/ 14 ноября 2009

Вам не нужна проверка, нет смысла проверять более одного языка. Вам нужна кнопка радио. Вы можете получить один, переопределив рендерер для полосы меню. Вам также необходимо обработать событие 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 голосов
/ 13 ноября 2009

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

...