【问题标题】:TextBox with a Transparent Background [duplicate]具有透明背景的文本框 [重复]
【发布时间】:2011-04-05 19:27:25
【问题描述】:

我想做一个透明背景的文本框 c# .net 如果定义属性,Visual Studio 会出错

【问题讨论】:

  • 您能详细说明并展示您的代码吗?
  • 我只是想整合图形,把隐藏图形的图片透明文本框放上去
  • 抱歉,这条评论没有帮助。你尝试了什么?您指的是什么错误和属性?
  • 这是不可能的。您必须迁移到 WPF 才能获得它。
  • 在这里查看我的答案:stackoverflow.com/a/19733917。告诉我这是否有帮助...

标签: c# .net winforms visual-studio


【解决方案1】:

把这个放在构造函数中:

SetStyle(ControlStyles.SupportsTransparentBackColor, true);

该类需要启用透明样式。 (由于某种原因,默认情况下不支持)。

public class MyControl : System.Windows.Forms.UserControl
{
        public MyControl ()
        {
            // Create visual controls
            InitializeComponent();
            SetStyle(ControlStyles.SupportsTransparentBackColor, true);
        }
}

或者如果它不是自定义控件:

mycontrolObject.SetStyle(ControlStyles.SupportsTransparentBackColor, true);

更多关于Control.SetStyle Method

其他Control Styles

【讨论】:

  • 这不适用于文本框。 .NET TextBox 只是旧 Win32 控件的包装器,因此他需要进行某种子类化。
  • 即使我对 TextBox 进行子分类,这也不起作用。我可以成功地将 BackColor 属性设置为 Color.Transparent(它不再引发异常),但文本框实际上并不透明 - 我看不到它背后的控件。
【解决方案2】:

我找到了解决这个问题的方法,我自己就有了。 我在这里读到的大部分内容都是真实的。对于某些环境来说,“à la”AlphaBlendTextBox 的方法太复杂或太耗时,而且已经很费电了。

假设您有给定的背景颜色和给定的图片,或者您想通过RichTextBox 控件看到的任何内容。这就是我所做的(总结):

  1. 在主窗体上,放置图片、文本、按钮或投影的任何内容,并使用适当的背景颜色和/或图片
  2. 创建一个新表单并将其放置在适当的位置
  3. 将此新表单TransparencyKey 设置为SystemColors.InactiveBorder
  4. 注意这个表单的边框属性(FormBorderStyle to FormBorderStyle.None; ControlBox,MinimizeBox, MaximizeBox and ShowIcon to false, TopMost to true4, @39到FormStartPosition.ManualSizeGripStyleSizeGripStyle.Hide),所以没有可见的表单结构
  5. 创建一个与表单大小相同并位于其左上角的RichTextBox
  6. 将此框 BackColor 设置为 SystemColors.InactiveBorder(还记得 TransparencyKey 吗?) 并将其 BorderStyle 也设为 None
  7. 注意文本框内容:颜色、字体和字符串
  8. 将此表单可见性与您需要的任何内容同步,然后...瞧!您可以通过在文本框中编写和编辑的任何内容来查看您的应用程序背景!

我不能假装这种方法适合所有人,但它比我见过的其他方法简单得多,只要我能保持这种方法,我确实更喜欢更简单的解决方案。

当然,当你关闭主窗体时,你必须照顾子窗体,但这对你来说很基本,不是吗?

享受吧!

【讨论】:

  • 我曾想过这样的事情,但步骤 3+6 从未在我的脑海中浮现。所以它对你有用吗?
【解决方案3】:

这不是一件容易的事。 .Net TextBox 控件是 Win32 Edit 控件的包装,因此您需要进行子类化以实现背景透明度。

看看这个样本:AlphaBlendTextBox - A transparent/translucent textbox for .NET

【讨论】:

  • 那个代码项目就像一个病毒。它不是一个文本框,只是看起来像一个。
  • @HansPassant 你能确认它是病毒吗?还是您只是对实施不满意?
  • @Jeremy - 它是自我复制的代码,因为它看起来很有吸引力,但总是让用户陷入困境。
猜你喜欢
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 2023-03-08
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多