2013-03-06 5 views
0

코드 편집기에서 작업 중이며 을 void 반환 메서드 내에서 keyargs 이벤트로 호출하려고합니다.다른 메소드에서 메소드를 호출하는 방법은 무엇입니까?

입력 키를 누르면 출력이 이루어져야하며 ComboBox에서 선택된 목록은 RichTextBox에있는 텍스트에 추가되어야합니다.

은 이제을 충족하기 위해,이 메소드를 호출하는 방법을 물어 싶습니다

void Parse() 
    { 
     String inputLanguage = 

      "using System;\n" + "\n" + 
      "public class Stuff : Form { \n" + 
      " public static void Main(String args) {\n" + 
      "\n" + "\n" + 
     " }\n" + 
     "}\n"; 

     // Foreach line in input, 
     // identify key words and format them when adding to the rich text box. 
     Regex r = new Regex("\\n"); 
     String[] lines = r.Split(inputLanguage); 
     foreach (string l in lines) 
     { 
      ParseLine(l); 
     } 
    } 
void ParseLine(string line) 
{ 
    Regex r = new Regex("([ \\t{}();])"); 
    String[] tokens = r.Split(line); 

    foreach (string token in tokens) 
    { 

     // Set the token's default color and font. 
     rtb.SelectionColor = Color.Black; 
     rtb.SelectionFont = new Font("Courier New", 10, FontStyle.Regular); 

     // Check for a comment. 
     if (token == "//" || token.StartsWith("//")) 
     { 
      // Find the start of the comment and then extract the whole comment. 
      int index = line.IndexOf("//"); 

      rtb.SelectedText = comment; 
      break; 
     } 

     // Check whether the token is a keyword. 
     var keywordsDef = new KeyWord(); 
     String[] keywords = keywordsDef.keywords; 

     for (int i = 0; i < keywords.Length; i++) 
     { 
      if (keywords[i] == token) 
      { 
       // Apply alternative color and font to highlight keyword. 
       HighlighType.keywordsType(rtb); 
       break; 
      } 
     } 
     rtb.SelectedText = token; 
    } 
    rtb.SelectedText = "\n"; 
} 

을이 하나 내에서 :

void lb_KeyDown(object sender, KeyEventArgs e) 
    { 

     if (e.KeyCode == Keys.Escape) 
     { 
      lb.Visible = false; 
      lb.Items.Clear(); 
     } 

     if (e.KeyCode == Keys.Enter) 
     { 
      //ParseLine(string line); 
      Parse(); 

      string comment = line.Substring(index, line.Length - index); 

      rtb.SelectedText = comment + " " + lb.SelectedIndex.ToString(); 
     } 
    } 

정말 도움이 필요합니다. 미리 큰 감사드립니다!

+0

주석 처리 된 라인의 문제점은 무엇입니까? 나는// ParseLine (string line);을 의미합니다. –

+0

3 개의 오류가 나타납니다. 유효하지 않은 표현식 'string', 유효하지 않은 표현식 ')'; 예상 –

+1

처음 알지 못했습니다. 'ParseLine (line);'메소드 호출시 타입을 지정할 필요가 없습니다. –

답변

1

매개 변수를 잘못 전달했습니다. 메소드를 호출 할 때는 유형을 전달할 수 없습니다. 주석 라인은

ParseLine(line); 

변수 line이 곳 ParseLine 위에서 언급해야 읽어야합니다. 무엇에 포함하는 것은 당신에게 달려 있지만, 아마도 당신은 그래서 당신의 코드는 다음과 같이 읽을 수

string line = lb.Text; 

을 설정하려면 : 함수를 호출

void lb_KeyDown(object sender, KeyEventArgs e) 
{ 

    if (e.KeyCode == Keys.Escape) 
    { 
     lb.Visible = false; 
     lb.Items.Clear(); 
    } 

    if (e.KeyCode == Keys.Enter) 
    { 
     string line = lb.Text; 
     ParseLine(line); 
     //Parse(); 

     string comment = line.Substring(index, line.Length - index); 
     rtb.SelectionColor = Color.Green; 
     rtb.SelectionFont = new Font("Courier New", 10, FontStyle.Italic); 
     rtb.SelectedText = comment + " " + lb.SelectedIndex.ToString(); 
    } 
} 
+0

내가 5errors가 나타납니다 선언 후 ive 언급으로 ive 언급. 현재의 컨텍스트 (x3)에 'line'이름이 존재하지 않습니다. 'index'이름이 현재 컨텍스트 (x2)에 존재하지 않습니다. . . 이 줄 안의 문제 >>> string comment = line.Substring (index, line.Length - index); <<< source는 항상 this : void ParseLine (string line), void를 사용하지 않고 문자열 행을 호출하려면 어떻게해야합니까? –

+0

예, 여기서 *는 *'index'가 선언 된 곳입니까? 나는 그것을 볼 수없고 어느 쪽도 컴파일러가 될 수 없다. 또한, 내 코드 에서처럼 올바르게 선언하면 첫 번째 오류가 발생하지 않습니다. 잘못된 위치에'line'을 선언하고 있습니다. 질문을 현재 코드로 업데이트하십시오. –

+0

if (token == "//"|| token.StartsWith ("//")) { // 주석의 시작 부분을 찾은 다음 전체 주석을 추출하십시오. int index = line.IndexOf ("//"); 문자열 주석 = line.Substring (index, line.Length - index); rtb.SelectedText = comment; 휴식; } –

0

문제가되지 않습니다,하지만 당신은 몇 가지 방법이 필요합니다 현재 사용중인 편집기에서 현재 행을 검색합니다. 검색 한 후에는 ParseLine으로 전화 할 수 있지만 가지고있을 때까지는 아무 것도 할 필요가 없습니다.

관련 문제