Laden...

UserControl in einem Tab mit UseVisualStyleBackColor

Erstellt von LonelyPixel vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.377 Views
L
LonelyPixel Themenstarter:in
333 Beiträge seit 2007
vor 13 Jahren
UserControl in einem Tab mit UseVisualStyleBackColor

Ich habe ein user control das transparente Bereiche im Hintergrund hat. (Es soll zumindest so aussehen.) Die OnPaintBackground-Methode habe ich nicht überschrieben, es wird also immer der graue Hintergrund angezeigt. Wenn ich das Control jetzt aber in einer TabPage einfüge, ist der Hintergrund ja nicht grau, sondern weiß. Mein Control hat aber immer noch den grauen Hintergrund. Wie bekomme ich das jetzt hin, dass sich der Hintergrund des UserControls nach dem des Parent richtet?

Erschwerend kommt vllt. noch hinzu, dass sich das UserControl in einem anderen CustomControl und dort in einem TableLayout befindet. Das ändert aber alles nichts an der Hintergrundfarbe des Tabs.

(Windows 7 mit dem Aero-Theme, sollte aber auch XP Luna betreffen)

D
99 Beiträge seit 2011
vor 13 Jahren

Wenn du sowieso weißt, dass es weiss sein soll wieso machst du es dann erst Transparent und nicht gleich im selben weiß?

Ein guter Rat ist nur ein guter Rat für den, der ihn braucht.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo LonelyPixel,

Erschwerend kommt vllt. noch hinzu, dass sich das UserControl in einem anderen CustomControl und dort in einem TableLayout befindet. Das ändert aber alles nichts an der Hintergrundfarbe des Tabs.

durch ein transparentes Control sieht man immer die Hintergrundfarbe des Controls, in das das Control hinzugefügt wird. Wenn dein UserControl also in einem TableLayoutPanel liegt, siehst du die Hintergrundfarbe, die im TableLayoutPanel eingestellt ist.

Hallo Die Dose,

Wenn du sowieso weißt, dass es weiss sein soll ...

das weiß er ja gerade nicht. Das Control soll immer die Farbe des Parents annehmen, egal welche das ist.

herbivore

L
LonelyPixel Themenstarter:in
333 Beiträge seit 2007
vor 13 Jahren

Seit wann unterstützen Windows-Forms-Controls denn echte Transparenz? Soweit ich weiß, muss jedes Control sein eigenes Rechteck vollständig zeichnen, sonst bleiben dort Fragmente stehen oder es wird schwarz.

Beim Versuch, BackColor auf Transparent zu setzen, bekomme ich folgende (bekannte) Fehlermeldung: "Das Steuerelement unterstützt keine transparenten Hintergrundfarben."

4.221 Beiträge seit 2005
vor 13 Jahren

Beim Versuch, BackColor auf Transparent zu setzen, bekomme ich folgende (bekannte) Fehlermeldung: "Das Steuerelement unterstützt keine transparenten Hintergrundfarben."

Und wenn Du genau mit dieser Fehlermeldung suchst (z.B: Google) dann findest Du auch den Grund...

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo LonelyPixel,

Seit wann unterstützen Windows-Forms-Controls denn echte Transparenz?

tun sie nicht und ich habe das nie behauptet, ich habe im Gegenteil beschrieben, was passiert und das ist gerade keine echte Transparenz, weil man durch ein Control immer nur den Hintergrund des Parents sieht, natürlich nur, wenn das Control überhaupt Transparenz unterstützt.

herbivore

L
LonelyPixel Themenstarter:in
333 Beiträge seit 2007
vor 13 Jahren

Und wenn Du genau mit dieser Fehlermeldung suchst (z.B: Google) dann findest Du auch den Grund...

Sorry, dieser Beitrag war nicht hilfreich. Nach einigen Suchergebnissen der deutschen und englischen Formulierung des Fehlers habe ich keine Information gefunden, die du gemeint haben könntest.

Ich habe vorerst eine andere Lösung gefunden. In OnPaintBackground verwende ich VisualStyleRenderer.DrawParentBackground, um den Hintergrund zu zeichnen. Das funktioniert zumindest in Windows 7 mit allen Levels von Themes (von Glass bis ganz aus) und in TabPages und direkt in Forms. Der Code sieht dann so aus:


protected override void OnPaintBackground(PaintEventArgs pevent)
{
	if (VisualStyleRenderer.IsSupported)
	{
		// The VisualStyleElement does not matter, we're only drawing the parent's background
		VisualStyleRenderer r = new VisualStyleRenderer(VisualStyleElement.Window.Dialog.Normal);
		r.DrawParentBackground(pevent.Graphics, ClientRectangle, this);
	}
	else
	{
		base.OnPaintBackground(pevent);
	}
}

4.221 Beiträge seit 2005
vor 13 Jahren

lSorry, dieser Beitrag war nicht hilfreich. Nach einigen Suchergebnissen der deutschen und englischen Formulierung des Fehlers habe ich keine Information gefunden, die du gemeint haben könntest.

Ich meinte nur, dass Du den hier hättest finden müssen:

Gewusst wie: Verwenden eines transparenten Hintergrunds für ein Steuerelement

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...