0

質問:クリックすると、キーをメインウィンドウ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:申し訳ありませんが私の悪い英語

4

1 に答える 1

0

あなたのデザインは間違っています。が押された場合、引数が 1 つ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");
}

(テストされていませんが、あなたはアイデアを得ました)

于 2012-10-30T18:43:47.887 に答える