none
在自定义组件内如何判断每个字符的真确位置,谢谢!!! RRS feed

  • 问题

  • 我用gr.DrawString(Me.Text, Me.Font, New SolidBrush(Me.ForeColor), 0, 0)在组件内(仿写textbox)写了一行字符串,如(“123行字符串hgf行字符串HG456F”),我想实现鼠标在哪个字符点击,就在那个字符后画一条线,我用以下方法,不能得到正确的位置求教高手帮助,谢谢!!!

      Protected Overrides Sub OnMouseClick(e As MouseEventArgs)
            MyBase.OnMouseClick(e)
             CanFocus = True
            Me.Focus()
            If e.X < TextRenderer.MeasureText(Me.Text, Me.Font).Width Then
                Twith = CInt(e.X / (TextRenderer.MeasureText(Me.Text, Me.Font).Width / Me.Text.Length))‘想求得点击的是第几个字符,但字符大小写、中英文、符号的宽度都不相同,无法正确得到点击的是那个字符
            Else
                Twith = Me.Text.Length
            End If
            moudowen = False
            timerboon = True
            DrawBordern()
            ' MsgBox((TextRenderer.MeasureText(Me.Text, Me.Font).Width / e.X) & "   " & TextRenderer.MeasureText(Me.Text, Me.Font).Width & "    " & e.X & "    " & e.X / (TextRenderer.MeasureText(Me.Text, Me.Font).Width / Me.Text.Length))
                  Me.Invalidate()
        End Sub

    2012年11月5日 0:57

答案

  • 你好,

    翻阅了一些资料,暂时没有发现可行的方案。但是有一个替代的方案,将这些字体设置为等宽字体,中文字体及符号是英文字体符号的2倍宽。这样就可以精确的指导每个字符的位置了。

    TextBox1.Font = New Font(FontFamily.GenericMonospace, TextBox.DefaultFont.Size)

    另外,你也可以为每一个字符创建一个小的Label,根据点击的Label来确定点击的字符.

    Best regards,


    Shanks Zen
    MSDN Community Support | Feedback to us

    • 已标记为答案 YQY888 2012年11月10日 7:55
    2012年11月6日 7:46
    版主