繁体   English   中英

Monodevelop:从C#/ Visual Studio移植:双击消失

[英]Monodevelop: Porting from C#/Visual Studio: Double Click disappear

在过去的两个月中,我已经在Visual Studio中使用C#编写了应用程序。 现在,我必须将该应用程序通过Monodevelop移植到Linux。 好了,我已经解决了大多数移植错误,但是有一个我无法弄清楚。 Visual Studio中的所有双击和鼠标双击事件都停止工作-我什至创建了一个小型1形式应用程序,仅通过一个窗体和一个事件(双击)就将其移植到了Mono上-它也没有起作用-因此这意味着Monodevelop无法将double端口移植从Visual Studio中单击事件? 我已经检查了WND_Proc函数,Linux没有抛出任何相应的双击事件(在窗口中为515,在标题栏上为300)。 我已经放弃并准备编写其他代码来解决我的代码中的所有双击问题,但也许有人会给出答案。

我正在使用Ubuntu linux(如果需要,我可能会检查内核版本),MONO:2.8.3,Visual Studio 2008和.NET 3.5中的项目。

在实现鼠标单击时,应牢记Windows和Gtk#之间有两个主要区别:

  1. Gtk#不提供“双击”信号(在Windows术语中为“事件”),而仅提供单个“单击”信号。 但是,Gdk库的EventButton类确实实现了双击和三次单击!
  2. Gtk#区分小部件(在Windows术语中为“控件”)和“容器”(在Windows中没有直接可比的)。 放在Gtk#表单上的大多数小部件都不会收到鼠标单击事件。 为了接收鼠标事件,您需要将小部件放置在特定的容器内,例如EventBox。

Gtk#的处理方法如下:

答:将一个EventBox容器添加到您的窗体(在下面的示例中:eventbox1)。 您可以将其放置在其他Widget的后面,或者将其放置在其他Widget的后面,除非您特别选择将其选中(或更改其背景颜色)。 您可以将一个小部件放在EventBox内,但仅限于一个小部件,它也将获得EventBox的形状和大小。

B.从“ Common Widget Signals”中添加信号“ ButtonPressEvent”(在下面的示例中:OnEventbox1ButtonPressEvent)

每次在EventBox中单击鼠标按钮(左,中或中心或组合键)时,都会触发此事件,并会调用函数OnEventbox1ButtonPressEvent()。 如果您需要识别在处理此事件时单击的按钮,请在以下参数中使用uint值:args.Event.Button通常为'1'将是鼠标左键,'2'是中心按钮,'3'是右按钮(当同时单击向左和向右按钮时,也可能是“ 2”)。

顺便说一句,默认情况下不发送鼠标移动事件(不按任何按钮)。 因此,如果您需要感知它们,则还需要在下面的代码示例的第一个类似内容中添加PointMotionMask。

这是ButtonPress事件处理程序(EventBox名称为'eventbox1')的代码示例,该示例使用EventButton类捕获双击事件:

// 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
}

接收到的事件的顺序(在双击的情况下)为:

  1. Gdk.EventType.ButtonPress
  2. Gdk.EventType.ButtonRelease
  3. Gdk.EventType.ButtonPress
  4. Gdk.EventType.TwoButtonPress
  5. Gdk.EventType.ButtonRelease

希望有帮助!

GTK#对双击事件的处理不同于Windows窗体。 您将必须编写代码来转换事件。 如果您这样做的话,不妨将时间花在反对双击作为习惯用法上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM