我使用Ubuntu linux(如果它可能是tommorow检查内核版本),MONO:2.8.3,Visual Studio 2008和.NET 3.5中的项目.
解决方法
> Gtk#不提供“双击”信号(Windows术语中的“事件”),但只提供单个“点击”信号.但是Gdk库确实实现了它的EventButton类的双击和三击!
> Gtk#区分小部件(或Windows术语中的“控件”)和“容器”(Windows中没有直接可比性).放置在Gtk#表单上的大多数小部件都不会收到鼠标单击事件.为了接收鼠标事件,您需要将窗口小部件放在特定容器中 – 如EventBox.
以下是你如何做到Gtk#:
A.向表单添加EventBox包含(在下面的示例中:eventBox1).您可以将其置于其他窗口小部件后面或因为它不可见,除非您专门选择它(或更改其背景颜色).您可以将一个小部件放在EventBox中,但是您只能使用一个小部件,它也将获得EventBox的形状和大小.
B.将“ButtonPressEvent”信号添加到此EventBox中的“Common Widget Signals”(在下面的示例中:OnEventBox1ButtonPressEvent)
每次在EventBox中单击鼠标按钮(左,中间或中间或组合)时,它将触发此事件,并将调用函数OnEventBox1ButtonPressEvent().如果您需要识别处理此事件时单击的按钮,请使用以下位置的uint值:args.Event.Button通常“1”将是鼠标左键,“2”是中心按钮,“3”是右键(单击左右按钮时也可能是’2′).
顺便说一句,默认情况下不会发送鼠标移动事件(没有按下按钮).因此,如果您需要感知它们,您将需要在下面的代码示例中添加PointMotionMask.
下面是使用EventButton类捕获双击事件的ButtonPress事件处理程序(EventBox名称为’eventBox1′)的代码示例:
// 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 only if this is a double-click event }
收到的事件的顺序(如果是双击)是:
> Gdk.EventType.ButtonPress
> Gdk.EventType.ButtonRelease
> Gdk.EventType.ButtonPress
> Gdk.EventType.TwoButtonPress
> Gdk.EventType.ButtonRelease
希望有所帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。