0

我正在使用代码编辑器,我想将字符串调用到 keyargs 事件中,该事件位于另一个返回 void 的方法中。

当我输入回车键时应该会出现输出,然后 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();
        }
    }

我真的需要帮助。提前非常感谢!

4

2 回答 2

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();
    }
}
于 2013-03-06T11:41:54.173 回答
0

调用该函数不是问题,但您需要某种方式在您使用的任何编辑器中检索当前行。一旦你检索到它,你就可以调用ParseLine它,但在你拥有它之前,你没有什么可做的。

于 2013-03-06T11:43:49.353 回答