TextBox with a Transparent Background

48,294

Solution 1

Put this in the constructor:

SetStyle(ControlStyles.SupportsTransparentBackColor, true);

The class need to enable the transparent style. (For some reason it isn't supported by default).

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

Or if it's not a custom control:

mycontrolObject.SetStyle(ControlStyles.SupportsTransparentBackColor, true);

More about Control.SetStyle Method

Other Control Styles

Solution 2

I've found a workaround for this problem, which I have on my own. Most of what I've read over here is true. And the approaches "à la" AlphaBlendTextBox are way too complex or too time-consuming for some environments, already heavily charged.

Assume you have a given background color and a given picture or whatever you want to see through the RichTextBox control. This is what I've done (summarized):

  1. on the main form, you place the picture, text, buttons or whatever as projected, with the proper background color and / or picture
  2. create a new form and position it wherever appropriate
  3. set this new form TransparencyKey to SystemColors.InactiveBorder
  4. take care of this form border properties (FormBorderStyle to FormBorderStyle.None; ControlBox,MinimizeBox, MaximizeBox and ShowIcon to false, TopMost to true, StartPosition to FormStartPosition.Manual, SizeGripStyle to SizeGripStyle.Hide), so there's no visible form structures
  5. create a RichTextBox with the same size of the form and located on its upper, left corner
  6. set this box BackColor to SystemColors.InactiveBorder (remember the TransparencyKey?) and its BorderStyle to None as well
  7. take care of textbox contents: color(s), font(s) and strings
  8. synchronize this form visibility with whatever you need to and... voilà! You can see your application background through whatever you write and edit on the text box!

I can't pretend this approach fits everybody, but it is way simpler than others I've seen and, as long as I can keep it that way, I do prefer the simpler solutions.

Of course, when you close the main form, you must take care of the child form, but this is pretty basic for you, isn't it?

Enjoy!

Solution 3

This is not an easy task. .Net TextBox control is a wrapper around Win32 Edit control, so you will need to do sub-classing to achieve background transparency.

Take a look at this sample: AlphaBlendTextBox - A transparent/translucent textbox for .NET

Share:
48,294
Admin
Author by

Admin

Updated on May 27, 2020

Comments

  • Admin
    Admin almost 4 years

    I want to do textBox a Transparent Background c# .net Visual Studio is making a mistake if you define Properties

  • HABJAN
    HABJAN about 13 years
    This will not work for a TextBox. .NET TextBox is just a wrapper for the old Win32 control so he will need to do some kind of sub-classing.
  • user1703401
    user1703401 about 13 years
    That code project is like a virus. It isn't a text box, it just looks like one.
  • EM0
    EM0 over 11 years
    Even when I sub-classed TextBox this didn't work. I can successfully set the BackColor property to Color.Transparent (it no longer throws an exception), but the textbox is not actually transparent - I cannot see the control behind it.
  • Jeremy Thompson
    Jeremy Thompson over 10 years
    @HansPassant can you confirm that it is a virus? or are you just not impressed with the implementation?
  • user1703401
    user1703401 over 10 years
    @Jeremy - it is code that duplicates itself because it looks attractive but gets its users in trouble all the time.
  • TaW
    TaW about 10 years
    I had pondered something like this but steps 3+6 never crossed my mind. So it works for you?