首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击任务栏上的图标时,如何使Form1出现/消失?

单击任务栏上的图标时,如何使Form1出现/消失?
EN

Stack Overflow用户
提问于 2016-03-02 15:28:33
回答 2查看 2.2K关注 0票数 1
  1. 打开计算机中的记事本。
  2. 单击任务栏上的记事本图标一次。
  3. 单击任务栏上的记事本图标一次。
  4. 单击任务栏上的记事本图标一次。

当您单击任务栏上的“记事本”图标时,可以看到“记事本”窗口出现/消失。

我用vb.net语言编写了windows窗体应用程序。

如何使Form1像记事本一样出现/消失?

我没有在Form1事件中找到任何图标事件。

当单击任务栏上的图标时,我不知道如何使用下面的代码。

代码语言:javascript
复制
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
    Me.WindowState = FormWindowState.Normal
    Me.WindowState = FormWindowState.Minimized
End Sub
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-02 15:42:24

对于任何可最小化的窗口,默认情况下都会发生这种情况。它是内置在窗口管理器中的。

你的代码会干扰它。删除对WindowState事件处理程序中的Click属性的篡改。您不需要设置WindowState来实现这一点。

只需确保表单的MinimizeBox属性没有被无意中设置为false (默认设置为true,这正是您想要的)。注意,为了最小化,表单的FormBorderStyle属性必须设置为FixedSingleSizableFixed3DFixedDialog。当然,如果窗体的属性配置为不可最小化,则当您单击其任务栏按钮时,窗口管理器将无法自动最小化和恢复它。

如果你坚持让一个无边界的形式最小化,那么你可以绕过它。至少,according to me several years ago;我没有重新测试代码。

在窗体类中,重写CreateParams方法并强制设置WS_MINIMIZEBOX样式:

代码语言:javascript
复制
protected override CreateParams CreateParams
{
    get
    {
        const int WS_MINIMIZEBOX = 0x20000;

        CreateParams cp = base.CreateParams;
        cp.Style |= WS_MINIMIZEBOX;
        return cp;
    }
}

不推荐-用户将很难弄清楚你的窗口实际上是最小的,因为它没有“提示录”按钮。通常,禁用窗体的边框只有在没有将窗体用作窗口的情况下才有用(例如,当您将窗体覆盖在另一个窗体上以获得特殊效果时)。如果它作为一个窗口出现在屏幕上,它应该看起来和行为都像一个窗口,这意味着它需要有一个边框。

票数 7
EN

Stack Overflow用户

发布于 2017-04-08 13:16:54

很明显,问题代码是在Visual .NET中的。

为什么需要这个答案;如果您正在构建应用程序而没有默认的可调整大小的表单。

例如,如果您正在创建一个应用程序,您需要用自己的关闭/最大化/最小化按钮绘制自己的标题栏,等等.虽然你不想让你的应用程序填满整个客户端桌面(全屏)。

这个答案对于完全定制的表单风格和行为是有用的。

我正在寻找的行和参数是cp.Style = cp.Style Or &H20000

虽然这个问题在谷歌搜索中是最重要的,希望其他开发人员可能需要参考一个快速答案和片段,以节省一些时间。

Visual .NET的代码如下所示:

代码语言:javascript
复制
    Public Class Form1
    ''''' Your code here
    Protected Overrides ReadOnly Property CreateParams() As Windows.Forms.CreateParams
            Get
                Dim cp As CreateParams = MyBase.CreateParams
                ' cp.ExStyle = cp.ExStyle Or &H2000000 
                ' This is for example to remove graphics flickering if you heavily 
                ' embed images in form1
                cp.Style = cp.Style Or &H20000  
                ' This to restore normal behavior even if you set 
                ' your FormBoarderStyle = None 
                Return cp
            End Get
        End Property

    End Class

谢谢您的提问和@Cody Gray的回答。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35751445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档