2016-07-16 2 views
0

キーを押したときに更新するラベルウィジェットを取得しようとしています。何らかの理由で、Gtkスレッドがキープレスを正しく登録していても(たとえば、コンソールにキーを書き込むなど)、ラベルテキストを更新することはできません。これはmacos上でモノ4.4.0とgtk-sharp 2.12です。イベントハンドラでgtksharp更新ウィジェットを取得するには?

public MainWindow() : base(Gtk.WindowType.Toplevel) 
{ 
    Build(); 
    this.KeyPressEvent += ToddlerKeyPressEventHandler; 
} 

public void ToddlerKeyPressEventHandler (object o, Gtk.KeyPressEventArgs args) { 
    Gtk.Application.Invoke(delegate { 
     string letter = args.Event.Key.ToString(); 
     this.letterLabel.Text = letter; 
     Console.WriteLine(letter); 
     this.letterLabel.QueueDraw(); 
    }); 
} 
+0

なぜイベントハンドラコードを呼び出すのですか?そのイベントはすでにメインのgtkスレッドで実行されます。 –

+0

コードの実行場所を確認しようとしていました。どちらの方法でも動作しません。 – cemig

答えて

0

あなたには属性がありません。これを試してみてください:

[GLib.ConnectBeforeAttribute] 
public void ToddlerKeyPressEventHandler (object o, Gtk.KeyPressEventArgs args) 
{ 
    letterLabel.Text = args.Event.Key.ToString(); 
} 

ベア心​​の中でイベントハンドラがラベルウィジェットにフックアップされている場合にもそのラベルウィジェットのための「選択」プロパティがチェック(trueに設定されていることを確認しない限り、これは動作しないこと)。

関連する問題