以单声道发出KeyPress

时间:2012-08-28 12:54:40

标签: c# mono gtk sendkeys

问题:点击button1发送"a"键进入主窗口。我该怎么做? (请举例)

using System;  
using Gtk;  
namespace pressevent
{   
class MainClass 
{       
   public static void Main(string[] args)       
   {
            Application.Init();
            MainWindow win = new MainWindow();
            win.KeyPressEvent += delegate(object o, KeyPressEventArgs a) {
                if(a.Event.Key == Gdk.Key.a)
                    Console.WriteLine("Key pressed");
                else
                    Console.WriteLine("Key not pressed");
            }; 
            Button btn1 = win.getButton1();
            btn1.Pressed += (sender, e) => 
            { 
                Console.WriteLine("Button1 pressed"); 
                                // Here code that send "a" key to MainWindow
            };
            win.Show(); Application.Run(); 
}}}

感谢。 PS:对不起,我的英文不好

1 个答案:

答案 0 :(得分:0)

你的设计错了。如果按下Button1,则必须在MainWindow上调用一个方法,该方法有一个参数:问题的"a"

在主窗口上,事件单击调用相同的方法。

一般来说,不要在处理程序中放置逻辑。它们只是包含逻辑的方法的入口点或调度程序。

Application.Init();

MainWindow win = new MainWindow();
win.KeyPressEvent += (sender, e) =>
{
    win.MethodWithLogic(e.Event.Key);
}; 

Button btn1 = win.getButton1();
btn1.Pressed += (sender, e) => 
{ 
    Console.WriteLine("Button1 pressed"); 
    win.MethodWithLogic(Gdk.Key.a);
};

win.Show(); 
Application.Run(); 

此外,在MainWindow类中(或通过继承,创建自己的类)

public void MethodWithLogic(Gdk.Key key)
{
  if(key == Gdk.Key.a)
      Console.WriteLine("Key pressed");
  else
      Console.WriteLine("Key not pressed");
}

(未经测试,但你明白了)