【问题标题】:how to exclude control from a WinForm.Opacity in C#如何从 C# 中的 WinForm.Opacity 中排除控件
【发布时间】:2015-11-02 00:33:19
【问题描述】:

我有一个表单,我将它的不透明度设置为 50%,如下所示:

this.Opacity = 0.5D; <--this==Form

我的问题是表单上的所有内容都具有 50% 的不透明度

我在表单上有两个按钮,我希望它们没有不透明度。

我知道this.Opacity 包含所有控件,出于某种原因还包含图形

我的问题是,如何排除控件的不透明度?

示例图片:

谢谢!

【问题讨论】:

  • 您真的要降低表单的不透明度吗?或者你只想带来暗淡的效果?如果是后者,则可以使用粗略的技巧来突出您的控件。
  • 透明键是你的问题解决者:msdn.microsoft.com/fr-fr/library/…

标签: c# .net winforms


【解决方案1】:

由于Control 没有Opacity 属性,再加上大多数控件不支持透明色,那么一个可行的解决方案可以是:

  1. 创建一个名为MainFormForm 并放置所有要排除的控件。

    1.1 将MainFormBackColorTransparencyKey属性设置为相同颜色,例如Color.Red

  2. 创建另一个名为TransparentForm 的表单并放置所有必须变为透明的控件。将ShowInTaskbar 属性设置为False

  3. MainForm Load 事件中显示TransparentForm 并将其发送到后面。

    private void MainForm_Load(object sender, EventArgs e)
    {
        TransparentForm form = new TransparentForm();
        form.Opacity = 0.5D;
        form.Show();
        form.SendToBack(); 
    }
    

两种形式的控件的位置必须是这样,当组合时,它显示正确的用户界面。

【讨论】:

  • 这听起来是个不错的方向。我会尝试并回复评论!谢谢!
  • 与其将所有应该透明的控件发送到另一个表单,不如只发送不应该透明的控件而不是SendToBack
  • 这是正确的想法,但您至少需要使用 Show(owner) 将一个放在另一个之上。并且顶部应该使用 TransparencyKey 属性,底部应该使用 Opacity 属性。
【解决方案2】:

创建一个 C# 项目并添加 3 个名为

的表单
  1. 主要
  2. 背景
  3. 孩子

并为“MAIN”表单加载事件添加以下代码;

private void MAIN_Load(object sender, EventArgs e)
{
     Child frm1 = new  Child();
     BACKGOUND frm2 = new BACKGOUND();
     frm2 .WindowState = System.Windows.Forms.FormWindowState.Maximized;      

     frm2.Opacity = 0.5;
     frm2.Show();

     frm1.ShowDialog();
     frm2.Close();
}

【讨论】:

    猜你喜欢
    • 2013-02-22
    • 1970-01-01
    • 2021-10-23
    • 2012-01-10
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    相关资源
    最近更新 更多