【问题标题】:Is it possible to create a dashed border around text boxes in visual basic.net windows form application?是否可以在 Visual basic.net Windows 窗体应用程序中的文本框周围创建虚线边框?
【发布时间】:2017-12-28 23:23:12
【问题描述】:

我一直在使用允许我在 vb.net 中的文本框周围画线的代码,但这些线是实线。我想用虚线甚至虚线来修饰应用程序。有没有办法像在表单上那样在文本框周围制作虚线?我正在使用的当前代码是这样..

Dim g As Graphics = e.Graphics
Dim pen As New Pen(Color.Aqua, 2.0)
Dim txtBox As Control
  For Each txtBox In Me.Controls
      If TypeOf (txtBox) Is TextBox Then
          g.DrawRectangle(pen, New Rectangle(txtBox.Location, txtBox.Size))
      End If
  Next
pen.Dispose()

我还想提一下,我可以在绘制事件中使用此代码在我的表单周围画一条虚线。将它放在文本框周围看起来真的很好,我希望这是可能的!

ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle,Color.Aqua, ButtonBorderStyle.Dashed)

编辑:我刚刚尝试过这段代码,它似乎在绘制虚线矩形,但它们并没有绕过我的文本框,所以不知道如何修复它。

Dim txtBox As Control
  For Each txtBox In Me.Controls
    If TypeOf (txtBox) Is TextBox Then
      ControlPaint.DrawBorder(e.Graphics, txtBox.ClientRectangle, txtBox.ForeColor, ButtonBorderStyle.Dashed)
    End If
  Next

【问题讨论】:

  • this question on Experts' Exchange。您可能还想查看this page on MSDN。强烈建议您在将问题发布到 StackExchange 网络之前进行一些研究;通过谷歌搜索vb draw dashed border around textbox,我在不到一分钟的时间内找到了这两个。
  • Experts Exchange 上的示例仅显示做一个文本框是否可以循环并获取表单上的每个文本框,因此我不必将此代码放在每个绘制事件中文本框。我确实发布了上面的代码,表明我正在尝试对所有文本框执行此操作,而不仅仅是一个。
  • 可以进行实验并找出自己是否可以循环进行。或者你可以自己做更多的研究。编程通常是一个类似于组装乐高积木的过程。你的问题表明你错过了一块特定的砖,我的回答告诉你在哪里可以找到那块砖。如何将它们组合在一起取决于您,您需要了解如何做到这一点才能真正将自己视为程序员。
  • 我不认为自己是程序员。当我需要一个程序来做一些简单的事情时,我这样做是为了好玩。我来这里之前确实搜索了谷歌,但没有找到我要找的东西。我确实觉得我的问题可能措辞不同。我对编码很陌生,我很难自己想出办法来做这样的事情。我从例子中学习得更好。当我需要自己做的时候,我的头脑就不能很好地工作。感谢您的回复。
  • @JoeBobJr 您需要将边框膨胀到比您要绘制的控件的大小大一点。

标签: vb.net textbox


【解决方案1】:

喜欢这个

Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
    For Each txtBox As Control In Me.Controls
        If TypeOf (txtBox) Is TextBox Then
            Dim borderRectangle As Rectangle = New Rectangle(txtBox.Location, txtBox.Size)
            borderRectangle.Inflate(1, 1)
            ControlPaint.DrawBorder(e.Graphics, borderRectangle, txtBox.ForeColor, ButtonBorderStyle.Dashed)
        End If
    Next
End Sub

【讨论】:

  • 太棒了!我现在看到的效果很好。太你了,这正是我想要的。现在,如果我愿意的话,我可以使用类似的东西在每个控件上做边框。非常感谢!
  • 是否有理由将此代码与 Form 而不是 Textbox 一起使用不会在表单上添加边框?
  • 我相信我知道为什么我要尝试为每个控件设置一个 sub 并为每个控件调用 sub,我相信这与 e as painteventargs 不允许多个控件被送到它什么的。我将不得不解决它。
  • 您希望每次重新绘制窗口时都重新绘制边框。
  • 适用于 20 个文本框。如果面板内有文本框...我认为它们不会循环。您必须创建一个循环来遍历面板并在面板内查找文本框或将代码放入面板绘制事件中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
  • 1970-01-01
  • 2017-07-20
  • 1970-01-01
  • 2019-08-17
  • 2022-01-18
相关资源
最近更新 更多