2016-07-16 22 views
0

我試圖讓一個標籤小部件在按下按鍵時進行更新。出於某種原因,即使Gtk線程正確註冊按鍵(例如,將鍵寫入控制檯),也無法獲取標籤文本更新。這是macos上的mono 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(選中)。

相關問題