2012-05-14 5 views
0

Как создать изогнутые края текстового поля в Winform C#Textbox с закругленными углами

Образец TextBox: http://www.codeproject.com/KB/edit/RoundedCornerTextbox/RoundedTextbox.png

Этот код VB

Protected Overrides Function ProcessCmdKey(ByRef msg _ 
        As System.Windows.Forms.Message, _ 
        ByVal keyData As System.Windows.Forms.Keys) As Boolean 
    If msg.WParam.ToInt32() = CInt(Keys.Enter) Then 
     SendKeys.Send("{Tab}") 
     Return True 
    ElseIf msg.WParam.ToInt32() = CInt(Keys.Decimal) Then 
     SendKeys.Send(",") 
     Return True 
    End If 
End Function 

Следующий метод является фактическим наиважнейшая события WM_Paint, в котором выполняется перерисовка. Он использует функции API GetWindowDC и ReleaseDC, чтобы получить фактическую графику элемента управления, включая неклиентскую область.

Protected Overrides Sub WndProc(ByRef m As _ 
      System.Windows.Forms.Message) Handles MyBase.WndProc(m) 
    Select Case m.Msg 
     Case &HF 'WM_PAINT 
      Dim rect As New Rectangle(0, 0, MyBase.Width, MyBase.Height) 
      Dim hDC As IntPtr = GetWindowDC(Me.Handle) 
      Dim g As Graphics = Graphics.FromHdc(hDC) 
      If Me.Enabled Then 
       g.Clear(Color.White) 
      Else 
       g.Clear(Color.FromName("control")) 
      End If 
      DrawBorder(g) 
      DrawText(g) 
      ReleaseDC(Me.Handle, hDC) 
      g.Dispose() 
     Case &H7, &H8, &H200, &H2A3 
     'CMB_DROPDOWN, CMB_CLOSEUP, WM_SETFOCUS, 
     'WM_KILLFOCUS, WM_MOUSEMOVE, 'WM_MOUSELEAVE 
      UpdateState() 
    End Select 
End Sub 

Чтобы получить закругленные углы, используют способ, показанный ниже.

Private Sub TekenRondeRechthoek(ByVal g As Graphics, _ 
      ByVal pen As Pen, ByVal rectangle As Rectangle, _ 
      ByVal radius As Single) 
    Dim size As Single = (radius * 2.0!) 
    Dim gp As GraphicsPath = New GraphicsPath 
    gp.AddArc(rectangle.X, rectangle.Y, size, size, 180, 90) 
    gp.AddArc((rectangle.X + (rectangle.Width - size)), _ 
       rectangle.Y, size, size, 270, 90) 
    gp.AddArc((rectangle.X + (rectangle.Width - size)), _ 
       (rectangle.Y + (rectangle.Height - size)), _ 
       size, size, 0, 90) 
    gp.AddArc(rectangle.X, (rectangle.Y + _ 
      (rectangle.Height - size)), size, size, 90, 90) 
    gp.CloseFigure() 
    g.DrawPath(pen, gp) 
    gp.Dispose() 
End Sub 

Как создать в C#

+0

Попробуйте http://converter.telerik.com/ или http://www.developerfusion.com/tools/convert/ vb-to-csharp/ – Anuraj

+0

Если вы уже решили проблему, не включайте информацию в вопрос, размещайте ее как отдельный ответ. – ChrisF

ответ

Смежные вопросы