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??
Hallo Coder,
klingt danach, als könnte dir ControlStyles.DoubleBuffer bzw. eine Forumssuche nach DoubleBuffer helfen.
herbivore
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
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
Hallo Coder,
dann schreib doch bitte Grund und Lösung für nachfolgende Hilfesuchende.
herbivore
Jep, denn das hätte mir genau JETZT geholfen 😦
schade..
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
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
... und wie hast du das gelöst? Würde mich brennend interessieren 🙂
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 ?