adv*_*v12 8 c# scroll touch winforms windows-10
我正在尝试在Windows 10平板电脑(Dell Venue 8 Pro)上运行Windows窗体应用程序.通常,Windows将触摸事件转换为明显的鼠标事件对应物.然而,它正在做垂直滑动的奇怪事情.
我的应用程序有一个自定义控件(直接从其构造函数中Control
调用派生SetStyle(ControlStyles.Selectable..., true)
),显示Direct3D呈现的图形.控件将MouseDown
- > MouseMove
- > MouseUp
序列解释为旋转关于外观位置的视图的请求.这在桌面上运行良好,但在平板电脑上它会中断:我的自定义控件上的垂直滑动以某种方式被Windows捕获并传递到附近DataGridView
,在那里它们被解释为滚动表格的请求.在DataGridView
我的控制是不一样的容器下的兄弟姐妹; 它们处于完全不同的控制层次级别.这是一个截图:
我做了一些调试,以证明在垂直滑动过程中没有任何鼠标事件可以控制我.当我抬起手指时,右边有一些涓涓细流,但在垂直滑动过程中没有任何东西.
问题似乎是我的代码(在事件处理程序中)根本没有运行,因为没有输入正在进入我的控制.
这里发生了什么,有什么办法可以告诉Windows不要将我控件上发生的垂直滑动事件发送到一个完全不相关的控件?
编辑:我应该补充一点,我Focus()
在我的代码中调用了所有地方,以确保我的控件在鼠标悬停时聚焦.我把它放在OnMouseMove
,OnMouseDown
并且几乎每个其他鼠标事件.
编辑:我已经构建了一个小型Visual Studio 2010解决方案来演示此问题.这里有太多的代码可以在线重现,但很容易理解.构建它,将其安装在Windows 10平板电脑上,然后尝试在最右边的控件中垂直滑动.请注意,而不是那个控件接收一堆鼠标事件,DataGridView
火灾Scroll
.
更新:我已经明确测试了在DataGridView
获取Scroll
事件时我的控件是否集中.如果我如上所述呼叫Focus()
我的控制以响应MouseMove
等等,我的控制确实得到焦点并在垂直滑动时保持它DataGridView.Scroll
.在DataGridView.Scroll
事件处理程序中,我打印出我的控件是否是焦点,它是.所以这不是DataGridView
偷窃重点的问题; DataGridView
即使我的控制力集中,这也是我操控滑动的问题.
注意:如果我设置dataGridView.ScrollBars
为ScrollBars.None
,则滑动的鼠标事件会转到我的控件.我一直在弄乱丑陋的黑客,每当我的控制集中注意力时隐藏滚动条,并在每次聚焦时显示它们DataGridView
.但他们都是丑陋的黑客,有令人不快的副作用.
归档时间: |
|
查看次数: |
741 次 |
最近记录: |