更改windows窗体-c#中的文本框边框样式

本文关键字:文本 边框 样式 windows 窗体 -c# 更改 | 更新日期: 2023-09-27 18:00:57

我有一个文本框,它是正方形的,现在我想把这个正方形转换成椭圆形我正在使用获胜表格应用程序

有人能说出这个的任何想法吗

更改windows窗体-c#中的文本框边框样式

您可以使用SetWindowRgn API函数来更改窗口的形状。正如您在这里看到的,这个函数有三个参数:

  1. 窗口句柄:这可以是您的TextBox句柄,您可以通过Handle属性获取它
  2. Window RGN:您可以通过调用CreateRoundRectRgn(或您可以在此处找到的其他RGN创建者函数(来创建它
  3. 用于确定Redraw的布尔值:最好为true

您可以从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);
    }
}

创建由textbox继承的ur类,覆盖OnPaint。在winforms中使用您的自定义文本框。

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

或者,创建一个自定义控件并覆盖OnPaint,以便它使用图形绘制椭圆。DrawElipse。

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

如果你可以使用WPF,那就简单多了。如果你能让你的应用程序成为一个WPF应用程序,那么你所需要做的就是把一个文本框放到你的表单上,然后为形状放入一个自定义模板。