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)
如果打开,则构建,关闭自定义控件设计器,您将能够在任何其他控件或窗体上使用此控件.
创建一个继承自TextBox的新控件,将样式设置为允许构造函数中的透明度.然后使用新控件而不是TextBox
在您的构造函数中执行此操作:
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
Run Code Online (Sandbox Code Playgroud)
这将允许您的新控件具有透明背景颜色.
您可以在此处阅读有关控件样式的更多信 MSDN:控件样式,这也可能有所帮助; 使用Visual C#从Windows窗体控件继承
我从来不喜欢为此做自己的继承控件。因此,我对私有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);
| 归档时间: |
|
| 查看次数: |
56508 次 |
| 最近记录: |