【问题标题】:How to draw outline around a borderless form?如何在无边界表单周围绘制轮廓?
【发布时间】:2012-09-05 00:53:36
【问题描述】:

我有一个用作启动画面的表单。因为它是一个飞溅,所以它没有边框。启动画面是白色的,所以当它加载到其他白色的东西上时,它看起来很有趣。我正在考虑在表单周围添加一个大约 1 px 左右的轮廓,以便给它一个细边框。可以将其视为在 Photoshop 中为图像添加笔触。我该怎么做?我正在使用 vb.net。

【问题讨论】:

    标签: vb.net visual-studio-2010 user-interface gdi


    【解决方案1】:

    你可以使用 GDI+:

    Protected Overrides Sub OnPaintBackground(ByVal e As PaintEventArgs)
        MyBase.OnPaintBackground(e)
    
        Dim rect As New Rectangle(0, 0, Me.ClientSize.Width - 1, Me.ClientSize.Height - 1)
    
        e.Graphics.DrawRectangle(Pens.Black, rect)
    End Sub
    

    (当然,您可以将任何Pen 替换为Pens.Black。)

    【讨论】:

    • 完美运行。我真的很感激。
    • 奇怪的是,我唯一看到的错误是,即使表单的背景设置为白色,它也会将背景绘制为它后面的任何颜色。此外,当主窗体按应有的方式加载时,启动画面也不会自动关闭。这不是问题,因为我可以在主窗体的 form_load 上手动关闭它。我只是想知道为什么会这样?
    • @user1632018:你确定它在覆盖OnPaintBackground 之前没有那样做吗? (关于结束,我的意思是。)至于画它背后的任何颜色,那是我的错误;见编辑。
    • 谢谢,我的错。效果很好。欣赏它。
    【解决方案2】:

    您还可以使用以下内容:

        Private Sub frm_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
            ControlPaint.DrawBorder(e.Graphics, Me.ClientRectangle, Color.Black, ButtonBorderStyle.Outset)
        End Sub
    

    Color 和 ButtonBorderStyle 都可以根据您的需要进行自定义。

    【讨论】:

    • 感谢@Nathan,这行简单的代码运行良好!
    • 这个其实更好
    【解决方案3】:

    如果您在表单中使用停靠面板,现在可能会显示此边框。如果您在表单中使用停靠面板,我建议在表单的所有边缘提供 1 的“填充”。这非常有效。

    【讨论】:

      猜你喜欢
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      • 1970-01-01
      • 2017-05-23
      • 2014-06-17
      • 2018-02-13
      • 2019-11-04
      相关资源
      最近更新 更多