【问题标题】:Help with C# notepad project帮助 C# 记事本项目
【发布时间】:2009-11-13 14:31:03
【问题描述】:

我正在 WinForms 中制作多语言(计算机语言)记事本。我有一个带有名为“语言”的工具条菜单条的菜单条(如文件、编辑、查看等)。当您单击“语言”时,有几个可检查的菜单项。我想这样做:当一个项目被点击时,它会显示为选中;当用户再次单击它时,它显示为未选中。如何为每种语言(如 java、c、c++ 等)合并编译器。

【问题讨论】:

  • 您的问题不是很清楚——您需要菜单方面的帮助,还是编译器列表方面的帮助?
  • 如果可能的话,我希望得到这两个方面的帮助。就像一个名为 Compile 的菜单项。

标签: c# winforms notepad


【解决方案1】:

您不想要检查,检查一种以上的语言是没有意义的。你需要一个单选按钮。您可以通过覆盖菜单条的渲染器来获得一个。您还需要处理菜单项的 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);
      }
    }
  }

【讨论】:

  • 非常感谢。现在有人可以发布有关如何访问每种编程语言的编译器的代码。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 2012-01-03
    相关资源
    最近更新 更多