在Windows窗体中更改文本框边框样式 - c#

时间:2011-07-01 14:17:50

标签: c# winforms textbox border

我有一个文本框,它是方形的,现在我想把那个方块转换成椭圆形 我正在使用win form application

任何人都可以对此有所了解

4 个答案:

答案 0 :(得分:3)

您可以使用SetWindowRgn API函数更改窗口的形状。 这个函数 - 你可以看到here - 得到三个参数:

  1. 窗口句柄:这可以是您的TextBox句柄,您可以通过Handle属性获取它。
  2. 一个窗口RGN :您可以通过调用CreateRoundRectRgn(或其他可以找到它们的RGN创建函数here)来创建它。
  3. 确定重绘的布尔值:最好是真实。
  4. 您可以从TextBox创建子类,并使用OnHandleCreated方法中的此函数创建椭圆形TextBox。课程可以是这样的:

    class OvalTextBox : TextBox
    {
        [DllImport("user32.dll")]
        static extern int SetWindowRgn(IntPtr hWnd, IntPtr hRgn, bool bRedraw);
    
        [DllImport("gdi32.dll")]
        static extern IntPtr CreateRoundRectRgn(int x1, int y1, int x2, int y2, int cx, int cy);
    
        public OvalTextBox()
        {
            base.BorderStyle = System.Windows.Forms.BorderStyle.None;
        }
    
        protected override void OnHandleCreated(EventArgs e)
        {
            base.OnHandleCreated(e);
            SetWindowRgn(this.Handle, CreateRoundRectRgn(0, 0, this.Width, this.Height, 20, 20), true);
        }
    }
    

答案 1 :(得分:1)

创建由文本框继承的ur类,重写OnPaint。在winforms中使用自定义文本框。

答案 2 :(得分:1)

使用OvalShape控件并在其中放置一个文本框。文本框应该是一个不可见的。

或者,创建一个customcontrol并覆盖OnPaint,以便用graphics.DrawElipse绘制椭圆。

答案 3 :(得分:0)

如果您使用Windows窗体执行此操作,唯一的方法是创建新的用户控件并从TextBox继承您的控件。然后,您必须覆盖OnPaint方法并实现自己的绘图代码。

如果你可以使用WPF,它会更容易。如果您可以将应用程序设置为WPF应用程序,那么您需要做的就是将文本框放到表单上,然后放入形状的自定义模板中。