首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Graphics.DrawRectangle无法在控制事件中工作

Graphics.DrawRectangle无法在控制事件中工作
EN

Stack Overflow用户
提问于 2014-10-26 19:27:40
回答 2查看 1.6K关注 0票数 0

首先,感谢您从繁忙的日程中抽出时间来帮助我。

我正在开发一个带有表单和3个文本框(TextBox1、TextBox2和TextBox3)的项目(Win Application)。

我需要画一个矩形周围的文本框,当聚焦这一点。

守则是:

代码语言:javascript
运行
复制
Private Sub TextBox123_Enter(sender As Object, e As System.EventArgs) Handles TextBox1.Enter, TextBox2.Enter, TextBox3.Enter
    Using g As Graphics = Me.CreateGraphics
        Dim r As Rectangle = sender.Bounds
        r.Inflate(4, 4)
        g.DrawRectangle(Pens.Blue, r)
    End Using
End Sub

问题如下:

  • 第一次未绘制textbox1获取焦点矩形。
  • 第一次未绘制textbox2获取焦点矩形。

当触发前两个事件时,为什么不绘制矩形?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-26 21:07:49

使用CreateGraphics绘图几乎总是不正确的方法。如果还注意到,当您从一个框移动到另一个框时,旧矩形不会被擦除。您需要使用Form_Paint事件来使其正常工作。Or...perhaps更简单的做法是创建一个比子TextBox大1-2像素的UserControls,并设置UserControl画布的背景色,在控件获得焦点时绘制矩形。

用于形式油漆:

代码语言:javascript
运行
复制
Public Class Form1
    Private HotControl As Control

如果您只打算执行TextBoxes,则可以声明它为As TextBox。通过这种方式,您可以对其他控件类型执行相同的操作。设置/清除跟踪器:

代码语言:javascript
运行
复制
Private Sub TextBox3_Enter(sender As Object, e As EventArgs) Handles TextBox3.Enter,
           TextBox2.Enter, TextBox1.Enter
    HotControl = CType(sender, TextBox)
    Me.Invalidate()
End Sub

Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave,
           TextBox2.Leave, TextBox3.Leave
    HotControl = Nothing
    Me.Invalidate()
End Sub

Me.Invalidate告诉表单重新绘制自己,这发生在画图中:

代码语言:javascript
运行
复制
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint

    If HotControl IsNot Nothing Then
        Dim r As Rectangle = HotControl.Bounds
        r.Inflate(4, 4)
        e.Graphics.DrawRectangle(Pens.Blue, r)
    End If

End Sub

您还应该严格地打开选项。

票数 1
EN

Stack Overflow用户

发布于 2014-10-26 20:04:31

click event处理程序中试一试

代码语言:javascript
运行
复制
Private Sub TextBox1_Click(sender As Object, e As EventArgs) Handles TextBox1.Click
    Using g As Graphics = Me.CreateGraphics()
        Dim rectangle As New Rectangle(TextBox1.Location.X - 1, _
            TextBox1.Location.Y - 1, _
            TextBox1.Size.Width + 1, _
            TextBox1.Size.Height + 1)
        g.DrawRectangle(Pens.Blue, rectangle)
    End Using
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26576990

复制
相关文章

相似问题

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