2009-11-13 2 views
0

WinForms에서 다국어 (컴퓨터 언어) 메모장을 만들고 있습니다. "언어"(파일, 편집,보기 등)라는 toolstripmenuitem이 포함 된 메뉴 스트립이 있습니다. "언어"를 클릭하면 몇 가지 선택 가능한 메뉴 항목이 있습니다. 이 작업을 수행하려고합니다. 항목을 클릭하면 체크 표시됩니다. 사용자가 다시 클릭하면 선택 표시되지 않습니다. Java, C, C++ 등의 언어별로 컴파일러를 어떻게 변형합니까?C# 메모장 프로젝트에 대한 도움말

+5

질문이 명확하지 않습니다 - 메뉴 또는 컴파일러 목록이 도움이 필요합니까? –

+0

가능한 경우 두 가지 모두에 대한 도움을 드리고 싶습니다. 컴파일이라고하는 menuitem처럼. –

답변

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

각 컴파일러의 경로/위치를 저장하는 설정 파일이 있어야합니다. 사용자가 언어를 선택하면 선택한 언어의 일치하는 컴파일러의 경로/위치를 가져와야합니다.

관련 문제