开发者

Custom-drawn control won't render controls behind it even though it's transparent

开发者 https://www.devze.com 2022-12-08 23:05 出处:网络
I\'m currently writing a custom-designed tab control. I created my own control instead of o开发者_开发知识库wner-drawing the TabControl because I figured it\'d be faster and more flexible. My tab cont

I'm currently writing a custom-designed tab control. I created my own control instead of o开发者_开发知识库wner-drawing the TabControl because I figured it'd be faster and more flexible. My tab control styles itself after the VS2008 tab control; that is, when a tab is selected, part of that tab is in front of other, unselected tabs.

My tab control consists of a Panel containing all of my TabButton objects which are the actual tabs themselves. I've set the TabButton to be transparent like so:

public TabButton()
{
     ...
     SetStyle(ControlStyles.SupportsTransparentBackColor | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
     UpdateStyles();
     this.BackColor = Color.Transparent;
}

However, when the tab is selected and in front of another tab, the portion of the unselected tab that should appear behind the portion of the selected tab is not rendered. It's the standard SystemColors.Control color that fills in the rest of the clipping rectangle for the selected button.

How can I achieve proper transparency in my custom control?

Also: TabButton inherits Control, that's why I needed to use SetStyle in order to use transparency.

-Eric Smith


Have a look at this: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/creating-a-transparent-panel-in-net/108.html

Last I was in .NET Windows Forms it wasn't readily apparent that you needed to do some of these psuedo hacks to get transparency to work. I'm not sure if they changed it in the last ~3 years, but I do remember doing something like this. I would try explicitly not drawing a background first.

0

精彩评论

暂无评论...
验证码 换一张
取 消