Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#Form.Hide()与Form.Opacity=0_C#_Winforms_User Interface_Opacity - Fatal编程技术网

c#Form.Hide()与Form.Opacity=0

c#Form.Hide()与Form.Opacity=0,c#,winforms,user-interface,opacity,C#,Winforms,User Interface,Opacity,我想知道是否有使表单完全透明(而不是隐藏它)的方法。例如,我知道在隐藏表单时,这些事情让我感到惊讶: 如果表单被隐藏,则无法与其控件交互(无法将HTML添加到webbrowser控件,无法按下按钮等) 在窗口隐藏时更改窗口的窗口状态(最小化、最大化等),将导致再次显示窗体时窗口显示在工作区域的范围之外 在使用不透明度设置为0(完全透明)的窗体时,是否有人遇到类似的问题(或完全不同的问题!)如果您不再需要该窗体,请将其隐藏。 但是如果您仍然有一个任务或计时器以您想要保留的形式运行,或者您想要保留用

我想知道是否有使表单完全透明(而不是隐藏它)的方法。例如,我知道在隐藏表单时,这些事情让我感到惊讶:

  • 如果表单被隐藏,则无法与其控件交互(无法将HTML添加到webbrowser控件,无法按下按钮等)
  • 在窗口隐藏时更改窗口的窗口状态(最小化、最大化等),将导致再次显示窗体时窗口显示在工作区域的范围之外

  • 在使用不透明度设置为0(完全透明)的窗体时,是否有人遇到类似的问题(或完全不同的问题!)

    如果您不再需要该窗体,请将其隐藏。 但是如果您仍然有一个任务或计时器以您想要保留的形式运行,或者您想要保留用户的输入,那么最好将不透明度设置为0%。 当我希望表单被隐藏但仍处于活动状态时,我会这样做:

    frmMain.Opacity = 0; // To make it invisible.
    frmMain.VisibleInTaskbar = false; // To make the taskbar entry of the form disappear, and to make sure that the WindowState isn't changed.
    frmMain.Enabled = false; // To make sure the user doesn't type something in the form, or presses a button (by pressing enter) by accident.
    

    从对我评论的支持票来看,我想我会把它作为一个答案提交。我不鼓励使用
    Form.Opacity=0
    。即使您可以禁用表单以防止意外交互,我认为透明表单会覆盖其他窗口,并让用户无法理解为什么他不能与透明表单后面的窗口交互


    对于
    Form.Hide()
    的gotcha,我通常将表单响应排队,以便当表单返回视图(或可见性)时,它通过队列处理操作(即更改表单状态)。在表单隐藏时更改表单也会让用户感到困惑。

    您是否仍然可以使用
    form.Opacity=0
    与表单交互?因此,如果它是完全透明的,我认为它会非常混乱…可能是试图单击透明窗口后面的某个窗口,而无法与其他窗口进行实际交互…更不用说意外触发透明窗口中的某个窗口。@bitxwise:+1。。。这正是发生在我身上的事。啊,真的!!我没有想到这一点。我想您可以更改不透明度并将其移到用户显示范围之外,还可以删除任务栏图标。不确定是否值得麻烦。谢谢你的意见!!Windows中的所有普通主题是否都支持不透明度(我特别想到的是Windows Home Server)?如果它不是目标,那么它可能会被忽略。我不知道答案(尽管建议支持WindowsServer2008R2,最新的WHS是在它上面写的,而WS2003是在旧的WHS上面写的)。如果没有人知道答案,如果你感兴趣,我可以稍后在我的家庭服务器上试试。@pickypg:说得好。并非所有主题(或Windows版本)都支持不透明度。出于文档的目的,我将我的评论移到了一个答案上。“我通常将表单响应排队”。。。我需要学会怎么做——这听起来是有史以来最有用的事情。也许?也许!据我所知,WinForms没有现成的功能(就像WPF一样)。因此,对于WinForms,您必须实现自己的
    操作
    队列,该队列在窗体获得焦点时被引用,这应该满足您的基本可见性需求,因为您知道,窗体在隐藏/不可见时无法获得焦点。这有点令人失望,但我认为这不是新情况。=)再次感谢你的所有想法。