我正在 WinForms 中制作多语言(计算机语言)记事本。我有一个带有名为“语言”的工具条菜单条的菜单条(如文件、编辑、查看等)。当您单击“语言”时,有几个可检查的菜单项。我想这样做:当一个项目被点击时,它会显示为选中;当用户再次单击它时,它显示为未选中。如何为每种语言(如 java、c、c++ 等)合并编译器。
问问题
970 次
2 回答
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);
}
}
}
于 2009-11-14T04:37:30.877 回答
0
你应该有一个设置文件来存储每个编译器的路径/位置。当用户选择一种语言时,您应该获得所选语言的匹配编译器的路径/位置。
于 2009-11-13T15:13:14.330 回答