【问题标题】:"Tint" an entire window, or alternative method of making window look inactive“着色”整个窗口,或使窗口看起来不活动的替代方法
【发布时间】:2020-04-02 20:09:42
【问题描述】:

我有一个打开多个对话框的winforms C# 应用程序。为了适应应用程序的风格,我删除了每个窗口的默认标题栏并创建了自己的标题栏(带有控制按钮和拖动移动功能)。

我现在面临的问题是,如果没有标题栏,当手动将它们分开时,用户无法分辨哪个窗口是“活动”窗口(因此它们不会重叠)。

在任何 Windows 应用程序(使用标题栏)中,当您尝试从对话框导航回主程序(不关闭对话框)时 - 它不会让您这样做。对话框的边框闪烁,您会听到 Windows 错误声音。如果不需要默认的标题栏,某种等效的视觉反馈会很棒 - 并且将整个窗口着色为更暗似乎可以很好地解决问题。

类似这样的伪代码,可以在对话框打开时很好地着色父窗口:

// tint window now
window.ShowDialog();
// un-tint window

我试图放置一个面板,覆盖所有颜色设置为“透明”的面板(目的是稍后控制面板的不透明度),但透明度似乎不起作用。实现这一目标的任何其他想法?或者有没有人有更好的建议来实现相同级别的视觉反馈?

总结: 有没有办法给整个窗口着色,或者用颜色覆盖它?如果没有,任何人都可以建议一种使窗口显示为“非活动”的替代方法吗?

【问题讨论】:

标签: c# winforms


【解决方案1】:

我建议您在要禁用的表单中创建一个方法:

void DisableForm()
{
    //some fancy color
    this.BackColor = System.Drawing.Color.Khaki;

    //and disable all controls owned by form, just to be sure
    foreach (var s in this.Controls)
    {
        ((Control)s).Enabled = false;
    }
}

当然还有支持这些形式的功能。

编辑。 您也可以将控件的可见性属性设置为 false

【讨论】:

  • 这行得通,但并没有真正达到预期的效果。此外,我的应用程序是黑色的,带有白色文本 - 所以我实际上没有任何背景颜色可以设置以使表单看起来不活动! :(
猜你喜欢
  • 2010-12-28
  • 1970-01-01
  • 2013-12-30
  • 2011-03-20
  • 2012-08-24
  • 2019-03-01
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
相关资源
最近更新 更多