在这段代码:
public partial class Form1 : Form
{
    public Form1()
    {
        TextBox consoleTextBox = new TextBox()
        {
            Multiline = true,
            Font = new Font(FontFamily.GenericMonospace, 9),
            Dock = DockStyle.Fill,
        };
        this.Controls.Add(consoleTextBox);
 
        MyConsole.OnWrite = str =>
        {
            consoleTextBox.BeginInvoke((Action)delegate { consoleTextBox.AppendText(str); });
        };
 
    }
 
    protected override void OnActivated(EventArgs e)
    {
        base.OnActivated(e);
        MyConsole.WriteLine("hello");
        MyConsole.Write("{0:X8}", 123);
        for(int i=0; i<4; i++) MyConsole.Write(" {0:X2}",i);
    }
}
 
public static class MyConsole
{
    public static Action<string> OnWrite {get; set;}
    public static void Write(string format, params object[] args)
    {
        Action<string> onWrite = OnWrite;
        if(onWrite != null) onWrite(string.Format(format, args));
    }
    public static void WriteLine(string format, params object[] args)
    {
        Write(format, args);
        Write(Environment.NewLine);
    }
}中的:
MyConsole.OnWrite = str =>
{
     consoleTextBox.BeginInvoke((Action)delegate { consoleTextBox.AppendText(str); });
};

protected override void OnActivated(EventArgs e)
{
    base.OnActivated(e);
    MyConsole.WriteLine("hello");
    MyConsole.Write("{0:X8}", 123);
    for(int i=0; i<4; i++) MyConsole.Write(" {0:X2}",i);
}
是怎样的一个调用关系?另外,假如我想利用上面的方法在两个TextBox输出不同的内容的话该怎么办?

解决方案 »

  1.   

    这两个代码有关系吗
    MyConsole.OnWrite 这个事lambda表达式
    第二个是个override函数
      

  2.   

    1、两者没有关系;
    2、在两个TextBox输出不同的内容,将下面的代码copy一份不就可以了
    TextBox consoleTextBox = new TextBox() 
            { 
                Multiline = true, 
                Font = new Font(FontFamily.GenericMonospace, 9), 
                Dock = DockStyle.Fill, 
            }; 
            this.Controls.Add(consoleTextBox); 
       
            MyConsole.OnWrite = str => 
            { 
                consoleTextBox.BeginInvoke((Action)delegate { consoleTextBox.AppendText(str); }); 
            };