C#如何让窗体中间一部分让鼠标透过

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#如何让窗体中间一部分让鼠标透过相关的知识,希望对你有一定的参考价值。

比如我在桌面上打开一个窗口,装口的背景是透明的,窗体上面有几个按钮,给人的感觉像是桌面多了几个按钮出来,这一步我可以做到,但是这里只是把窗口做透明了,并非不存在,也就是说如果你在这块透明的窗口上右击鼠标,你点击的是窗体,我想达到的在这块透明的地方可以让鼠标透过,点击的时候能点击到桌面

在windows操作系统,有一个dll专门负责鼠标穿透事件,穿透本质只针对设置色值区域,只要色值对得上的区域都能穿透,鼠标能直接操作覆盖的东西,色值对不上的区域正常显示。 参考技术A 窗体的TransparencyKey设置成red
然后把窗体的FormBorderStyle设置为None
窗体的BackColor设置为red
这样就可以使鼠标透过窗体点击到桌面追问

貌似我这个里面没FormBorderStyle这个属性呢,把这两个都设成RED的意思是弄透明对吧,那FormBorderStyle设成none如果没记错的话就是设边框的吧,你没懂我的问题,这只是把窗体设成了透明,还是不能点的到桌面的

追答

追问

C# VS2010.。。。。我这里貌似版本不对 是个试用版的,有些属性貌似找不到,晚上回去我去自己的电脑上试试看,如果可以的话分给你

追答

我也是VS2010,你那个属性找不到?

追问

FormBorderStyle这个,可能是版本问题吧,不对,找到了,刚刚是点错了,怪不得不对,可是不行,我点击不了

追答

你确定你设置了透明颜色以后还是无法点击?

追问

不行,这3个属性我都设了,不过我设的是黄色,这个应该没差别吧

追答

跟上面截图效果一样就是没有变法点过去?

追问

点不了

追答

你把3个属性的截图,还有运行的结果图给我,我看看

追问

追答

不知道了。可能跟.Net版本有关系吧。

本回答被提问者和网友采纳
参考技术B winform很难做到,用wpf做吧 挺简单。追问

。。。WPF貌似没接触过,我只是个菜鸟。。。。

追答

你创建一个wpf项目 把这个贴到xaml里试试

参考技术C 你说的这种情况貌似没有见过呢。理论上不是太好实现,因为电脑总要获取一个焦点的。你既然是个程序即使隐藏 了 但是只是视觉效果看不见,但是不代表他不存在。 而且这样做的意义究竟何在?建议换个别的方式进行实现。追问

我可以单个按钮实现,把窗体的大小弄到只有按钮那么大,然后把边框什么去掉,看上去就是屏幕上多了个按钮,而且按钮周围都可以点到桌面,但是如果多个这样的按钮就意味着我需要做多个这样的窗体,我想有多个按钮弄在一个窗体里面,使2个按钮中间的空白部分可以点击到桌面

就如这2个按钮,我就是这个方法做的,但是这两个按钮的中间部分是点击不到桌面的,因为这部分其实是有个透明的窗体存在的,

C#如何让鼠标停在一个窗体的时候弹出另一个窗体

是用窗体的聚焦事件吗

窗体有一个鼠标移动到上面的一个事件(moveover),在这个事件里面动态创建一个窗体(另一个窗体)并show之就行了。
你试试吧,这样肯定是可以的,但是你得注意,窗体还有一个事件(moveleave),也就是离开窗体事件,在这个事件中退出你刚才创建的窗体,这样你的程序就不会导致创建了很多窗口而导致内存泄露等问题。追问

嗯,我也发现这个事件了,不过能不能控制时间?让鼠标停留的时间长一点在弹出另一个窗口

追答

这个呀 你可以在moveover这个事件中先加一段时间延时呀,例如:sleep()方法,先睡眠一段时间再调用另外一个窗口。或者是两个for循环之类的来延时。

参考技术A 可以用Timer控件,比如停留超过1秒时,获取鼠标位置,再弹出窗体,窗体的TOP和LEFT设置为这个位置 参考技术B 在FORM上鼠标移动的事件 参考技术C 这个需要点击的追问

不点击不行吗?比如说鼠标停留在窗体的某个位置超过1S

参考技术D 我问下 你是用ASP.NET的 还是winform的追问

winform

以上是关于C#如何让窗体中间一部分让鼠标透过的主要内容,如果未能解决你的问题,请参考以下文章

C#如何让鼠标停在一个窗体的时候弹出另一个窗体

在C#环境下使用winfrom时如何让窗体根据用户显示器的分辨率来调整窗体的分辨率?

C# 能够让窗体的高度超过屏幕的最大高度吗?winform实现浏览器的效果。

C#中form的窗体属性formborderstyle设置为none后就不能移动了

winform 中怎样让窗体能拖动(移动),但是不改变窗体的大小(宽和高)

VB6中 怎么让MDI子窗体始终填满父容器,并随MDI窗体的大小改变而改变?