有个WINFORM,里面委托了个监听键盘输入的事件,如何让键盘的输入显示在WINFORM的textbox1里?下面的代码在 Console.WriteLine里可以,但我想更新form1里的一个textbox1的值/internal class EventReceiver
{
    public EventReceiver( KeyInputMonitor monitor )
    {
        // 产生一个委托实例并添加到KeyInputMonitor产生的事件列表中
        monitor.KeyDown += new KeyInputMonitor.KeyDownHandler( this.OnKeyDown );
    }     private void OnKeyDown(object sender, KeyEventArgs e)
    {
        // 真正的事件处理函数
        Console.WriteLine( "Capture key: {0}", e.KeyChar );
//这里可以显示出来,但如何显示在TEXTBOX1里?
    }
}public class MainEntryPoint
{
    public static void Start()
    {
        // 实例化一个事件发送器
        KeyInputMonitor monitor = new KeyInputMonitor();
        // 实例化一个事件接收器
        EventReceiver eventReceiver = new EventReceiver( monitor );
        // 运行
        monitor.Run();
    }

解决方案 »

  1.   

    google  “c# 自定义事件”
      

  2.   

    有搜索到结果,但都是要么MESSAGEBOX要么WRITELINE等
    没有说如何将结果显示在textbox里
      

  3.   

    this.Invoke(new SetDeviceName(SetDevice));
    SetDeviceName是定义的一个委托
    SetDevice是改变控件值的方法,你可以在SetDevice()方法里面改变textbox1的值
      

  4.   


    我是C#新手看不懂,请教一下
    this.Invoke(new SetDeviceName(SetDevice));写在哪?SetDevice如下写,不知对不
            public void SetDevice(string str)
            {            textBox1.Text += str;
            }结果出以下错误错误 2 非静态的字段、方法或属性“pro.old.textBox1”要求对象引用 D:\pros\2\pro\pro\old.cs 301 13 FB
    错误 1 “pro.old.EventReceiver”不包含“Invoke”的定义,并且找不到可接受类型为“pro.old.EventReceiver”的第一个参数的扩展方法“Invoke”(是否缺少 using 指令或程序集引用?) D:\pros\2\pro\pro\old.cs 126 34 FB
    错误 2 找不到类型或命名空间名称“SetDeviceName”(是否缺少 using 指令或程序集引用?) D:\pros\2\pro\pro\old.cs 126 45 FB
    错误 3 无法通过嵌套类型“pro.old.EventReceiver”来访问外部类型“pro.old”的非静态成员 D:\pros\2\pro\pro\old.cs 126 59 FB
      

  5.   

    this.Invoke(new SetDeviceName(SetDevice));写在哪?
    这个写在任何一个窗体类下面的成员函数中就行吧,this指的就是运行的form类。
    如果定义的委托有参数,setdevicename有参数,那么setdevice也得有参数,并且在调用的时候应
    this.Invoke(new SetDeviceName(SetDevice),new object[]{str});(我忘了啥样子了,大概是这样)
      

  6.   

    就你运行的错误来说:setdevicename是需要定义的
    用delegate关键字,你搜一下怎么定义的。
    定义完setdevicename,就可以用new setdevicename(setdevice)了