Laden...

Panel über Transparentz ausblenden

Erstellt von Coder vor 18 Jahren Letzter Beitrag vor 18 Jahren 3.310 Views
C
Coder Themenstarter:in
11 Beiträge seit 2005
vor 18 Jahren
Panel über Transparentz ausblenden

Servus Community

Ich bau gerade ein Control nach welches sich im Explorer auf der Rechten Seite befindet. Dieses wo man Optionen rein packen kann.

Beim drücken auf den Button in der Titelleiste des Controls kann man dieses schliessen.
Nun hab ich das schon soweit, das das Untere Panel mit den Optionen ausblended, aber das flimmert extrem dabei.

Ich hab das über einen Timer realisiert der im Intervall die Hintergrundfarbe verändert, so lange bis das panel voll Transparent ist.


private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    // d = Transparentz des Farbwertes, 0 voll Transparent - 255 nicht Transparent
	if( d >= 10 )
	{
		d-=10;
	}
	else
	{
		timer1.Enabled = false;
		d = 0;
	}
    this.panel2.BackColor = System.Drawing.Color.FromArgb(d,240,241,245);
}


Welche Möglichkeiten gibts da noch??

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Coder,

klingt danach, als könnte dir ControlStyles.DoubleBuffer bzw. eine Forumssuche nach DoubleBuffer helfen.

herbivore

J
19 Beiträge seit 2005
vor 18 Jahren

hallo coder

ich versteh dein problem nicht so ganz..
warum muss es den über die transparenz ausgeblendet werden=?

ansonsten halt wie herbivore sagte

SetStyle(ControlStyles.DoubleBuffer, true);

JAF

C
Coder Themenstarter:in
11 Beiträge seit 2005
vor 18 Jahren

Also das mit den ControlStyles... hat nich so geklappt wie ich das erhofft hatte aber ich habs nun ein bisschen anders gelöst.

Nun ist mir auch klar warum das so geflackert hat...

Trotzdem thx für den Tip.

Ciao

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Coder,

dann schreib doch bitte Grund und Lösung für nachfolgende Hilfesuchende.

herbivore

M
210 Beiträge seit 2005
vor 18 Jahren

Jep, denn das hätte mir genau JETZT geholfen 😦
schade..

1.985 Beiträge seit 2004
vor 18 Jahren

Hallo Coder,

eine Frage habe ich noch: Warum hast Du das Panel über die Transparenz ausgeblendet und nicht über die Sichtbarkeit (Opacity)?

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

C
Coder Themenstarter:in
11 Beiträge seit 2005
vor 18 Jahren

Hallo Fabian,

meines Wissens gibt es die Property Opacity beim Panel nicht, oder täusch ich mich?
Hab deshalb versucht das anders zu lösen

45 Beiträge seit 2004
vor 18 Jahren

... und wie hast du das gelöst? Würde mich brennend interessieren 🙂

despira.de - Thomas Claus - Taucherstr. 21 - 02625 Bautzen - Tel: 03591 / 480357 WebDesign - .Net Softwareentwicklung – Computergrafik – PC-Service
C
Coder Themenstarter:in
11 Beiträge seit 2005
vor 18 Jahren

Ok, ich habs später dann doch mit ControlStyles.DoubleBuffer gemacht. Ist einfach ne elegantere Lösung. Funktioniert auch wunderbar...

Ich hab einfach ein neues Control erstellt welches als panel dient.

Ich poste hier einfach mal den Code

Standartkonstruktor mit den Style einstellungen


public UserControl1()
{
	InitializeComponent();

	this.SetStyle( ControlStyles.DoubleBuffer, true);
	this.SetStyle( ControlStyles.UserPaint, true);
	this.SetStyle( ControlStyles.AllPaintingInWmPaint, true);
}

Timer event das die Transparenz steuert


private void timer1_Tick(object sender, System.EventArgs e)
{
	if( alpha > 1 ) alpha -= 2;
	else 
	{
		this.timer1.Enabled = false;
		alpha=0;
	}

	this.Refresh();
	this.label1.Text = "Aplha: "+alpha.ToString();
}

Paint event für das Control


private void UserControl1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
	System.Drawing.SolidBrush br = new SolidBrush(Color.FromArgb(alpha, SystemColors.Highlight));
	e.Graphics.FillRectangle(br,0,0,this.Width,this.Height);
}

Absolut flimmerfrei...

Allerdings gibts da noch das problem, das die Elemente die im Control sind, nicht mit transparent werden. Hat da vielleicht jemand ne Idee ?