Sto provando a creare una classe derivata Control
che supporta una proprietà Opcacity
.
Questo controllo potrebbe ospitare sia il testo e l'immagine e si beable a svanire fuori e in
Ecco il mio codice:.Controllo di dissolvenza in C#
internal class FadeControl : Control
{
private int opacity = 100;
public FadeControl()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
}
public int Opacity
{
get
{
return opacity;
}
set
{
if (value > 100) opacity = 100;
else if (value < 1) opacity = 1;
else opacity = value;
if (Parent != null)
Parent.Invalidate(Bounds, true);
}
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle = cp.ExStyle | 0x20;
return cp;
}
}
protected override void OnPaintBackground(PaintEventArgs e)
{
//do nothing
}
protected override void OnMove(EventArgs e)
{
RecreateHandle();
}
protected override void OnPaint(PaintEventArgs e)
{
using (Graphics g = e.Graphics)
{
Rectangle bounds = new Rectangle(0, 0, Width - 1, Height - 1);
int alpha = (opacity * 255)/100;
using (Brush bckColor = new SolidBrush(Color.FromArgb(alpha, BackColor)))
{
if (BackColor != Color.Transparent)
g.FillRectangle(bckColor, bounds);
}
ColorMatrix colorMatrix = new ColorMatrix();
colorMatrix.Matrix33 = (float)alpha/255;
ImageAttributes imageAttr = new ImageAttributes();
imageAttr.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
if (BackgroundImage != null)
g.DrawImage(BackgroundImage, bounds, 0, 0, Width, Height, GraphicsUnit.Pixel, imageAttr);
if (Text != string.Empty)
{
using (Brush txtBrush = new SolidBrush(Color.FromArgb(alpha, ForeColor)))
{
g.DrawString(Text, Font, txtBrush, 5, 5);
}
}
}
}
protected override void OnBackColorChanged(EventArgs e)
{
if (Parent != null)
Parent.Invalidate(Bounds, true);
base.OnBackColorChanged(e);
}
protected override void OnParentBackColorChanged(EventArgs e)
{
Invalidate();
base.OnParentBackColorChanged(e);
}
}
ho putted il controllo di una maschera che ha un timer su di esso.
Il timer imposta l'opacità del controllo da 0 a 100 e viceversa e funziona correttamente.
Il problema che sto cercando di risolvere è che il controllo sfarfallio mentre si modifica la sua opacità.
L'impostazione del controllo su ControlStyles.DoubleBuffer
renderà il controllo invisibile sul modulo.
Qualsiasi consiglio sarà benvenuto.
Ciò è inevitabile quando si utilizza WS_EX_TRANSPARENT. Quindi non usarlo. –
possibile duplicato di [Fade a panel- Windows forms] (http://stackoverflow.com/questions/10178559/fade-a-panel-windows-forms) –
Il controllo sul collegamento non supporta il backcolor trasparente. Vorrei che il cotrol fosse in grado di sfumare in entrata e in uscita mentre conteneva immagini e testi PNG. – toy4fun