GTK # Mausereignis in Zeichenbereich
Frage
Ich habe eine DrawingArea die Ich mag würde Mausereignisse zu empfangen. Aus den Tutorials habe ich festgestellt, dass das keyPressEvent auch Mausereignisse fangen. Jedoch für den folgenden Code wird die Handler nie aufgerufen.
static void Main ()
{
Application.Init ();
Gtk.Window w = new Gtk.Window ("");
DrawingArea a = new CairoGraphic ();
a.KeyPressEvent += KeyPressHandler;
w.Add(a);
w.Resize (500, 500);
w.DeleteEvent += close_window;
w.ShowAll ();
Application.Run ();
}
private static void KeyPressHandler(object sender, KeyPressEventArgs args)
{
Console.WriteLine("key press event");
}
Ich habe ein paar Dinge ausprobiert Lesen von verschiedenen Foren und Tutorials einschließlich:
ein EventBox zu den Fenstern Hinzufügen und die DrawingArea in der Event-Box setzen und für die EventBox zum keyPressEvent abonnieren möchte. (Funktionierte nicht)
Der Aufruf AddEvents ((int) Gdk.EventMask.AllEventsMask); auf irgendwelche und alle Widgets
Ich fand, dass in dem Windows-keyPressEvent abonniert habe mich Tastaturereignis aber nicht per Mausklick Ereignisse.
Alle relevanten Seiten in den Mono-docs geben Sie mir Fehler, damit ich ein bisschen bin stecken
Lösung
Sie sollten auch daran denken, dass ein Ereignis Maske zu Ihren DrawingArea hinzugefügt werden soll:
a.AddEvents ((int)
(EventMask.ButtonPressMask
|EventMask.ButtonReleaseMask
|EventMask.KeyPressMask
|EventMask.PointerMotionMask));
So Ihr endgültiger Code so aussehen sollte:
class MainClass
{
static void Main ()
{
Application.Init ();
Gtk.Window w = new Gtk.Window ("");
DrawingArea a = new DrawingArea ();
a.AddEvents ((int) EventMask.ButtonPressMask);
a.ButtonPressEvent += delegate(object o, ButtonPressEventArgs args) {
Console.WriteLine("Button Pressed");
};
w.Add(a);
w.Resize (500, 500);
w.DeleteEvent += close_window;
w.ShowAll ();
Application.Run ();
}
static void close_window(object o, DeleteEventArgs args) {
Application.Quit();
return;
}
}
Andere Tipps
Wenn Sie Mausereignisse fangen wollen, müssen Sie ButtonPressEvent, ButtonReleaseEvent und MotionNotifyEvent verwenden:
a.ButtonPressEvent += delegate(object o, ButtonPressEventArgs args) {
Console.WriteLine("Button Pressed");
}
keyPressEvent ist nur für Keys.