Transparentes Form mit pic.Box
-
Montag, 4. Februar 2013 18:39
Hallo zusammen,
Bin VisualC# 2010 Express Anfänger und habe eine Frage zu einer Form-Anwendung:
Mein Ziel ist eine transparente Form mit einer pictureBox die sichtbar wird wenn man mit dem Mauszeiger drüberfährt.
Dabei soll die Sichtbarkeit der Form von 10% auf 70%, und die der pic.Box von 10% auf 100% steigen. Das soll passieren wenn man mit der Maus nur die Form und nicht die pic.Box brührt!
hat vllt. jemand eine Idee wie das funktionieren kann?
hier noch ein Teil meines bisherigen Programmtextes bei dem beides glich transparent wird:
......
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_MouseEnter(object sender, EventArgs e)
{
Opacity = 0.8;
}
private void Form1_MouseLeave(object sender, EventArgs e)
{
Opacity = 0.25;
}
private void pictureBox1_MouseEnter(object sender, EventArgs e)
{
Opacity = 1.0;
}
private void pictureBox1_MouseLeave(object sender, EventArgs e)
{
Opacity = 0.25;
}
........
Alle Antworten
-
Montag, 4. Februar 2013 19:27Moderator
Hallo,
so wie du dir das vorstellst, wird das nicht funktionieren. Die PictureBox kann maximal die Sichtbarkeit der Form erreichen. Wenn du also die Form auf 10% setzt, dann ist die PictureBox auch nur zu 10% sichtbar.
Wenn ich jetzt versuche deinen Code zu korrigieren, dann musst du die Änderung der Opacity der PictureBox auch in den Eventhandlern der Form vollziehen:
private void Form1_MouseEnter(object sender, EventArgs e) { this.Opacity = 0.8; pictureBox1.Opacity = 1.0; } private void Form1_MouseLeave(object sender, EventArgs e) { this.Opacity = 0.25; pictureBox1.Opacity = 0.25; }Das Resultat des ganzen ist, das die PictureBox so gut wie nicht zu sehen ist und wenn die Maus auf die Form geht, die PictureBox zusammen mit der Form zu 80% sichtbar sind.Koopakiller [kuːpakɪllɐ] | Webseite | Code Beispiele | Facebook | Snippets
- Als Antwort vorgeschlagen Ionut DumaMicrosoft Contingent Staff, Moderator Dienstag, 5. Februar 2013 17:49
- Als Antwort markiert KVCPF Mittwoch, 6. Februar 2013 10:50
-
Dienstag, 5. Februar 2013 11:22Moderator
Hallo zusammen,
da Windows Forms nicht wirklich unterschiedlich transparente Regionen unterstützen, kann man sich hier eines Tricks bedienen und statt einer einzigen Form-Instanz mit einer pictureBox einfach zwei Forms übereinanderlegen (in mainForm: overlayForm.Show(this)).
Die erste Form hat einen beliebigen Opacity-Wert, die zweite Overlay-Form hat einen Opacity-Wert von 100% (1f), blendet aber den Hintergrund aus über overlayForm.TransparencyKey = overlayForm.BackColor = Color.Fuchsia. Diese Technik zeigt Hans Passant in seiner Antwort auf SO.
Das Bild in der overlayForm selbst kann man dann mittels eines Timers und graduell auf die gewünschte Transparenz bringen indem man Code wie diesen im OnPaint-Ereignis benutzt:
currentOpacity += .1f; float[][] colorMatrixDefinition = { new float[] {1, 0, 0, 0, 0}, new float[] {0, 1, 0, 0, 0}, new float[] {0, 0, 1, 0, 0}, new float[] {0, 0, 0, currentOpacity, 0}, new float[] {0, 0, 0, 0, 1} }; ColorMatrix colorMatrix = new ColorMatrix(colorMatrixDefinition); imageAttributes = new ImageAttributes(); imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected; e.Graphics.DrawImage(transparentBitmap, new Rectangle(0, 0, transparentBitmap.Width, transparentBitmap.Height), 0, 0, transparentBitmap.Width, transparentBitmap.Height, GraphicsUnit.Pixel, imageAttributes);
Wenn ich mal wieder Zeit haben werde, werde ich vielleicht ein komplettes Beispiel posten, aber ich hoffe, dass ich die Grundidee hier einigermaßen verständlich rübergebracht habe: Wenn man zwei Forms statt einer verwendet, kann man die Transparenz der zwei "Schichten" auch getrennt behandeln und den angestrebten Effekt erzielen.
Gruß
Marcel
- Als Antwort vorgeschlagen Ionut DumaMicrosoft Contingent Staff, Moderator Dienstag, 5. Februar 2013 17:49
- Als Antwort markiert KVCPF Mittwoch, 6. Februar 2013 10:50
-
Dienstag, 5. Februar 2013 12:31
Vielen Dank für eure Antworten!
Ihr habt mir wirklich sehr weiter geholfen!
-
Dienstag, 5. Februar 2013 17:50Moderator
Hallo KVCPF,
Wenn Dir die Antworten geholfen hat dann bitter markiere diese als Antwort.
Danke un Gruss,
Ionut

