使面板控件透明

Posted

技术标签:

【中文标题】使面板控件透明【英文标题】:making panel control transparent 【发布时间】:2012-12-24 07:57:43 【问题描述】:

我有一个面板控件,上面有一张背景图片。我希望它改变不透明度,我将鼠标移到它上面。我怎样才能做到这一点?我试过了:

  btnExit.BackColor = Color.FromArgb(20,63,63,63);
  btnExit.BackColor = Color.FromArgb(20);

但没有任何改变..任何想法为什么这不起作用?该面板位于另一个面板上,该面板也有背景图片。谢谢!

【问题讨论】:

如果你要降价,请提供理由(评论)> 我反对懦弱的降价。 我降级了什么? o_0 那么,你想让整个控件是半透明的吗? @JohnKoerner 是正确的。或者至少让它更亮/更暗来伪造它。谢谢 不透明度在 winforms 控件中是一件棘手的事情,并且不适用于重叠的控件。请参阅this 了解更多信息 【参考方案1】:

据我所知,用你的方法可以做到,但我猜你必须刷新控件。

btnExit.Refresh();

编辑:

首先设置您的按钮FlatStyle to Flat。

this.btnExit.FlatStyle = System.Windows.Forms.FlatStyle.Flat;

然后制作btnExit_MouseHover和btnExit_MouseLeave两个函数:

void btnExit_MouseHover(object sender, EventArgs e)

  btnExit.BackColor = Color.FromArgb(20, 63, 63, 63);
  btnExit.Refresh();


void btnExit_MouseLeave(object sender, EventArgs e)

  btnExit.BackColor = Color.FromArgb(100, 63, 63, 63);
  btnExit.Refresh();

要激活这些功能,请添加两个 EventHandler:

btnExit.MouseHover += new EventHandler(btnExit_MouseHover);
btnExit.MouseLeave += new EventHandler(btnExit_MouseLeave);

这样就可以了,现在您只需将背景颜色更改为您喜欢的颜色;)。

【讨论】:

谢谢!面板控件没有扁平的外观,所以我尝试了带有图像的常规按钮和带有图像的面板。常规按钮只是改变了背景颜色,面板闪烁了一秒钟,就像它即将工作一样,但重置回来了。我将鼠标悬停和离开的不透明度设置为 100,但同样的事情发生了。有小费吗?谢谢! 我猜当您停用 MouseLeave 事件处理程序时,它会对问题进行排序。或在 mouseHover 中设置 if 语句/开关并在 MouseLeave 中重置 var

以上是关于使面板控件透明的主要内容,如果未能解决你的问题,请参考以下文章

如何在以下面板示例中使所有控件可见

有没有办法使控件对 WPF 中的鼠标事件透明?

Kendo UI Dropdown,使下拉面板比控件更宽

使控件在拖放期间对拖动事件透明

vb.net 如何使panel有一定透明度

带不透明度的 WinForm 控件