winform界面改变panel背景色

时间:2022-04-07 14:48:40
自己做了一个界面,六个panel,里面分别包含一个label和一个picturebox,鼠标进入panel时改变panel背景色,鼠标离开时透明:
winform界面改变panel背景色
如果鼠标快速的从这些panel上划过,就会出现多个panel颜色改变,这个有什么好的方法实现吗?
winform界面改变panel背景色

源码:http://download.csdn.net/detail/haifeng3326/8194919#comment
..............................................
以前做c++的,刚开始学winform没多久,练手做的界面,感觉比MFC好看多了,分享一下,有兴趣的可以去看看。有一个登录界面和一个主界面,做的很简单,几张图片,设置一下背景,切换窗体,contextMenuStrip实现换肤,见笑!!

12 个解决方案

#1


不好意思,没说清楚。鼠标快速的从这些panel上划过时就会出现多个panel颜色改变,这个不是我想要的,怎么解决,或者还有别的方法实现这个效果?

#2


可以把离开时的颜色变成Null

#3


引用 2 楼 superior_yong 的回复:
可以把离开时的颜色变成Null



我做过一个类似的,但是我改变的是PictureBox,Foreimage用PNG,MoveLeave是BackImage为Null,移动的时候给张背景图。。。

#4


引用 3 楼 superior_yong 的回复:
可以把离开时的颜色变成Null

我做过一个类似的,但是我改变的是PictureBox,Foreimage用PNG,MoveLeave是BackImage为Null,移动的时候给张背景图。。。
有foreimage属性吗?

#5


引用 4 楼 haifeng3326 的回复:
Quote: 引用 3 楼 superior_yong 的回复:

可以把离开时的颜色变成Null

我做过一个类似的,但是我改变的是PictureBox,Foreimage用PNG,MoveLeave是BackImage为Null,移动的时候给张背景图。。。

有foreimage属性吗?



写过了,是Image

#6


这个简单啊,告诉你办法
在每个Panel_MouseOver事件中加入
pane1.BackColor=...
pane2.BackColor=...
就是把别的panel控件的背景色变回去就行了。

#7


引用 6 楼 SmileSkyNet 的回复:
这个简单啊,告诉你办法
在每个Panel_MouseOver事件中加入
pane1.BackColor=...
pane2.BackColor=...
就是把别的panel控件的背景色变回去就行了。


试了一下,如果鼠标没有在panel上停留直接进入到picturebox上颜色还是不改变,总不能把picturebox和label控件都加上吧。
Panel_MouseOver的时间只读还没法修改

#8


引用 7 楼 haifeng3326 的回复:
Quote: 引用 6 楼 SmileSkyNet 的回复:

这个简单啊,告诉你办法
在每个Panel_MouseOver事件中加入
pane1.BackColor=...
pane2.BackColor=...
就是把别的panel控件的背景色变回去就行了。


试了一下,如果鼠标没有在panel上停留直接进入到picturebox上颜色还是不改变,总不能把picturebox和label控件都加上吧。
Panel_MouseOver的时间只读还没法修改


答对了。 要么就只要用个label 放图片 autosize false  text对齐方式bottom mid

#9


我下载看了一下,这个问题比较严重。
首先,你用的是一个 Panel 上面叠了一个 PictureBox,然后这个问题的就是由于 PictureBox 和 Panel 这两者的 MouseEnter 和 MouseLeave 相互之间的切换过于频繁引起的,当你鼠标移动过快的时候,事实上,在这个事件里面,他还要进行相应的计算,反应速度跟不上你的节奏,因为在 PictureBox 的 侧边和 Panel 的侧边的距离很短,鼠标一个瞬移,就会出问题。
这个实现不好,真要组合图片,我建议你使用 UserControl,这样就不会混乱了。

#10


WinForm  透明背景色 是:  Color.Trans****

—— 将 背景色,设置为 这个 值,你的 按钮 也就 透明了。

#11


引用 7 楼 haifeng3326 的回复:
Quote: 引用 6 楼 SmileSkyNet 的回复:

这个简单啊,告诉你办法
在每个Panel_MouseOver事件中加入
pane1.BackColor=...
pane2.BackColor=...
就是把别的panel控件的背景色变回去就行了。


试了一下,如果鼠标没有在panel上停留直接进入到picturebox上颜色还是不改变,总不能把picturebox和label控件都加上吧。
Panel_MouseOver的时间只读还没法修改

当然要都加上,这个问题是很常见的,解决办法就是这样,每个控件都加上不过不用写这样的代码了
你把这个做成一个组合控件就行了,控件上放picturebox和label,然后在usecontrol_mouseover加上this.backColor=..
然后在picturebox_mouseover加上onmouseover(e);

#12


可以对pannel添加鼠标响应。判断鼠标的位置是否是在panel内,然后做响应的处理

#1


不好意思,没说清楚。鼠标快速的从这些panel上划过时就会出现多个panel颜色改变,这个不是我想要的,怎么解决,或者还有别的方法实现这个效果?

#2


可以把离开时的颜色变成Null

#3


引用 2 楼 superior_yong 的回复:
可以把离开时的颜色变成Null



我做过一个类似的,但是我改变的是PictureBox,Foreimage用PNG,MoveLeave是BackImage为Null,移动的时候给张背景图。。。

#4


引用 3 楼 superior_yong 的回复:
可以把离开时的颜色变成Null

我做过一个类似的,但是我改变的是PictureBox,Foreimage用PNG,MoveLeave是BackImage为Null,移动的时候给张背景图。。。
有foreimage属性吗?

#5


引用 4 楼 haifeng3326 的回复:
Quote: 引用 3 楼 superior_yong 的回复:

可以把离开时的颜色变成Null

我做过一个类似的,但是我改变的是PictureBox,Foreimage用PNG,MoveLeave是BackImage为Null,移动的时候给张背景图。。。

有foreimage属性吗?



写过了,是Image

#6


这个简单啊,告诉你办法
在每个Panel_MouseOver事件中加入
pane1.BackColor=...
pane2.BackColor=...
就是把别的panel控件的背景色变回去就行了。

#7


引用 6 楼 SmileSkyNet 的回复:
这个简单啊,告诉你办法
在每个Panel_MouseOver事件中加入
pane1.BackColor=...
pane2.BackColor=...
就是把别的panel控件的背景色变回去就行了。


试了一下,如果鼠标没有在panel上停留直接进入到picturebox上颜色还是不改变,总不能把picturebox和label控件都加上吧。
Panel_MouseOver的时间只读还没法修改

#8


引用 7 楼 haifeng3326 的回复:
Quote: 引用 6 楼 SmileSkyNet 的回复:

这个简单啊,告诉你办法
在每个Panel_MouseOver事件中加入
pane1.BackColor=...
pane2.BackColor=...
就是把别的panel控件的背景色变回去就行了。


试了一下,如果鼠标没有在panel上停留直接进入到picturebox上颜色还是不改变,总不能把picturebox和label控件都加上吧。
Panel_MouseOver的时间只读还没法修改


答对了。 要么就只要用个label 放图片 autosize false  text对齐方式bottom mid

#9


我下载看了一下,这个问题比较严重。
首先,你用的是一个 Panel 上面叠了一个 PictureBox,然后这个问题的就是由于 PictureBox 和 Panel 这两者的 MouseEnter 和 MouseLeave 相互之间的切换过于频繁引起的,当你鼠标移动过快的时候,事实上,在这个事件里面,他还要进行相应的计算,反应速度跟不上你的节奏,因为在 PictureBox 的 侧边和 Panel 的侧边的距离很短,鼠标一个瞬移,就会出问题。
这个实现不好,真要组合图片,我建议你使用 UserControl,这样就不会混乱了。

#10


WinForm  透明背景色 是:  Color.Trans****

—— 将 背景色,设置为 这个 值,你的 按钮 也就 透明了。

#11


引用 7 楼 haifeng3326 的回复:
Quote: 引用 6 楼 SmileSkyNet 的回复:

这个简单啊,告诉你办法
在每个Panel_MouseOver事件中加入
pane1.BackColor=...
pane2.BackColor=...
就是把别的panel控件的背景色变回去就行了。


试了一下,如果鼠标没有在panel上停留直接进入到picturebox上颜色还是不改变,总不能把picturebox和label控件都加上吧。
Panel_MouseOver的时间只读还没法修改

当然要都加上,这个问题是很常见的,解决办法就是这样,每个控件都加上不过不用写这样的代码了
你把这个做成一个组合控件就行了,控件上放picturebox和label,然后在usecontrol_mouseover加上this.backColor=..
然后在picturebox_mouseover加上onmouseover(e);

#12


可以对pannel添加鼠标响应。判断鼠标的位置是否是在panel内,然后做响应的处理