Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.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# 透明WinForm在最大化和还原后无法调整大小_C#_.net_Winforms - Fatal编程技术网

C# 透明WinForm在最大化和还原后无法调整大小

C# 透明WinForm在最大化和还原后无法调整大小,c#,.net,winforms,C#,.net,Winforms,我想创建一个WinForm,它有一个普通的框架,但大部分应用程序是透明的。我遇到了一个问题,在最大化和还原窗口后,框架边框不再可单击——单击只会传递到我的应用程序后面的应用程序。我已经能够通过执行以下操作,在一个普通的WinForms应用程序中重现这一点: 创建一个新的WinForms应用程序 将默认窗体的透明键和背景色设置为相同的颜色 运行应用程序 单击跑步表单的最大化按钮 单击向下恢复 窗体边框不再可单击(尽管有时我似乎在一侧得到1px的可单击边框) 网络上有很多关于透明表单和控件的信息,但

我想创建一个WinForm,它有一个普通的框架,但大部分应用程序是透明的。我遇到了一个问题,在最大化和还原窗口后,框架边框不再可单击——单击只会传递到我的应用程序后面的应用程序。我已经能够通过执行以下操作,在一个普通的WinForms应用程序中重现这一点:

  • 创建一个新的WinForms应用程序
  • 将默认窗体的透明键和背景色设置为相同的颜色
  • 运行应用程序
  • 单击跑步表单的最大化按钮
  • 单击向下恢复
  • 窗体边框不再可单击(尽管有时我似乎在一侧得到1px的可单击边框)

  • 网络上有很多关于透明表单和控件的信息,但我在这个bug上什么也没发现。考虑到复制的简单性,我怀疑我是第一个遇到这种情况的人。有什么解决办法吗?

    我已经试过你的例子,没有发现任何问题。最大化后,当我恢复窗口时,边框仍然可以调整大小。也许我不完全理解你的问题,但根据我的经验,似乎没有bug。(我愿意发表评论而不是回答,但我没有足够的代表)在多台机器上复制了这一点后,似乎共同点是Aero。空气动力学主题和形态透明度似乎不能很好地结合在一起。
    const int WM_SYSCOMMAND = 0x0112;
    const int SC_MINIMIZE = 0xF020;
    const int SC_MAXIMIZE = 0xF030;
    const int SC_RESTORE = 0xF120;
    const int SC_TOP = 0xF003;
    const int SC_LEFTTOP = 0xF004;
    const int SC_RIGHTTOP = 0xF005;
    const int SC_DBCLICKTITLEBARMAX = 0xF122;
    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m); 
        if (m.Msg == WM_SYSCOMMAND)
        {
            int sc = m.WParam.ToInt32();
            if (sc == SC_RESTORE | sc == SC_LEFTTOP | sc == SC_TOP | sc == SC_RIGHTTOP | sc == SC_DBCLICKTITLEBARMAX )
            {
                FormBorderStyle oldvalue = this.FormBorderStyle;
                this.FormBorderStyle = FormBorderStyle.None;
                this.FormBorderStyle = oldvalue;
            }
        }
    }