2

我在 monodevelop 3.0.4.6 上使用 GTK#,在 windows 上,我Gtk.EventBox连接到ButtonPressEventHandler检测单击(EventType.ButtonPress),但双击 ( EventType.TwoButtonPress) 永远不会触发,有人知道为什么吗?我什至尝试"[GLib.ConnectBefore]"在我的处理程序方法上添加属性,但它没有改变任何东西。我尝试了一个TreeView,一个按钮和一个事件框,所有那些检测到单击但没有双击的...


我的代码示例:

// Somewhere in the constructor :
eventBox.ButtonPressEvent += new ButtonPressEventHandler(myButtonPressHandler);


// The called method
private void myButtonPressHandler(object obj, Gtk.ButtonPressEventArgs a)
{
    EventButton ev = a.Event;
    // single click
    if (ev.Type == EventType.ButtonPress)
    {
        MyLogger.output("1");
    }
    // double click
    else if (ev.Type == EventType.TwoButtonPress)
    {
        MyLogger.output("2");
    }
}
4

2 回答 2

4

您的代码示例稍作修改,在我的机器上运行良好。我创建了一个名为“eventbox1”的事件框并捕获了信号“ButtonPressEvent”。唯一的区别是我检查收到的事件是否是双击的方式。我还确保发送了双击事件(参见第一行),但在我的情况下,它并不是真正需要的,它仍然有效。

这是在我的机器上运行并捕获双击的代码:

// The following line is may not be needed but is here to show how to do it
eventbox1.GdkWindow.Events = eventbox1.GdkWindow.Events | Gdk.EventMask.ButtonPressMask;

protected void OnEventbox1ButtonPressEvent (object o, ButtonPressEventArgs args)
{
    if( ((Gdk.EventButton)args.Event).Type == Gdk.EventType.TwoButtonPress)
        System.Media.SystemSounds.Beep.Play (); // Play a sound if this is double-click
}

想一想,如果您的系统上仍然没有收到双击事件,是不是您的系统设置为忽略双击?

于 2012-09-16T22:18:12.907 回答
0

这是Mono 中包含的 GTK+ 版本中的一个已知错误。如果您在 Windows 上使用 .NET 运行时运行您的应用程序,它会正常工作,因为用于 .NET 的 GTK# 捆绑了不同版本的 GTK+。

于 2012-09-30T19:23:23.010 回答