Windows窗体的透明度表示文本框

P1C*_*ted 15 c# transparency textbox alpha winforms

我在C#中使用Windows窗体,我需要使文本框的背景颜色透明.我有一个从0到255的轨道栏,它应该控制它,但我遇到了一些麻烦.我今天早些时候提出了一个问题问同样的问题,但没有成功.

这是我目前的代码:

private void trackAlpha_ValueChanged(object sender, EventArgs e)
{
    newColor = Color.FromArgb(trackAlpha.Value, colorDialog.Color.R, colorDialog.Color.G, colorDialog.Color.B);
    colorDialog.Color = newColor; // The Windows dialog used to pick the colors
    colorPreview.BackColor = newColor; // Textbox that I'm setting the background color
}
Run Code Online (Sandbox Code Playgroud)

问题是绝对没有任何反应.关于为什么这不起作用的任何想法?

在上一个问题上,这个好人说了些什么SetStyle(ControlStyles.SupportsTransparentBackColor, true);,但我不知道我应该把它放在哪里.

Pat*_*uza 16

你需要试试这样的东西.

添加一个新的用户控件,比如说CustomTextBox并进行更改

public partial class CustomTextBox : UserControl
Run Code Online (Sandbox Code Playgroud)

public partial class CustomTextBox : TextBox
Run Code Online (Sandbox Code Playgroud)

然后,您将收到以下错误,指出未定义"AutoScaleMode".删除Designer.cs类中的以下行.

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
Run Code Online (Sandbox Code Playgroud)

更改新添加的控件的构造函数,如下所示.

public partial class CustomTextBox : TextBox
{
    public CustomTextBox()
    {
        InitializeComponent();
        SetStyle(ControlStyles.SupportsTransparentBackColor |
                 ControlStyles.OptimizedDoubleBuffer |
                 ControlStyles.AllPaintingInWmPaint |
                 ControlStyles.ResizeRedraw |
                 ControlStyles.UserPaint, true);
        BackColor = Color.Transparent;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果打开,则构建,关闭自定义控件设计器,您将能够在任何其他控件或窗体上使用此控件.

将其从工具箱中删除,如下所示 在此输入图像描述

  • 此代码似乎无效。我放在测试表单中的此控件的实例根本不透明。 (2认同)
  • 添加了一个图像,以显示它在winforms中工作 (2认同)
  • 我知道这个线程有点旧,但是我有几个问题。我可以使用控件,但是文本的背景为白色,单击按钮后,所有文本消失,直到再次开始键入。有没有办法解决这两个问题? (2认同)
  • @PatrickD'Souza - 实施您的解决方案时,文本样式停止应用,文本未显示在文本框中,前景色和字体大小也不适用。 (2认同)

mad*_*don 5

创建一个继承自TextBox的新控件,将样式设置为允许构造函数中的透明度.然后使用新控件而不是TextBox

在您的构造函数中执行此操作:

this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
Run Code Online (Sandbox Code Playgroud)

这将允许您的新控件具有透明背景颜色.

您可以在此处阅读有关控件样式的更多信 MSDN:控件样式,这也可能有所帮助; 使用Visual C#从Windows窗体控件继承


Pla*_*ter 5

我从来不喜欢为此做自己的继承控件。因此,我对私有SetStyle函数进行了包装。

尝试使用它而不是创建自己的类?

public static bool SetStyle(Control c, ControlStyles Style, bool value)
{
    bool retval = false;
    Type typeTB = typeof(Control);
    System.Reflection.MethodInfo misSetStyle = typeTB.GetMethod("SetStyle", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
    if (misSetStyle != null && c != null) { misSetStyle.Invoke(c, new object[] { Style, value }); retval = true; }
    return retval;
}
Run Code Online (Sandbox Code Playgroud)

bool itWorked = SetStyle(myControl, ControlStyles.SupportsTransparentBackColor, true);