Ho cercato di visualizzare un'immagine con un bordo trasparente come sfondo di un controllo.Controllo disegno con sfondo trasparente
Purtroppo, l'area trasparente crea un buco nel form padre come segue:
Nell'immagine qui sopra, la forma ha un fondo rosso che avevo sperato di vedere dietro il mio controllo in le aree trasparenti.
Il codice che ho usato è il seguente:
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
if (this.Image != null)
{
Graphics g = Graphics.FromImage(this.Image);
ImageAttributes attr = new ImageAttributes();
//set the transparency based on the top left pixel
attr.SetColorKey((this.Image as Bitmap).GetPixel(0, 0), (this.Image as Bitmap).GetPixel(0, 0));
//draw the image using the image attributes.
Rectangle dstRect = new Rectangle(0, 0, this.Image.Width, this.Image.Height);
e.Graphics.DrawImage(this.Image, dstRect, 0, 0, this.Image.Width, this.Image.Height,
GraphicsUnit.Pixel, attr);
}
else
{
base.OnPaint(e);
}
}
protected override void OnPaintBackground(System.Windows.Forms.PaintEventArgs e)
{
//base.OnPaintBackground(e);
}
Questa classe viene ereditata da un PictureBox perché avevo bisogno di un controllo che implementa onMouseMove e onMouseUp eventi.
Ho svolto ricerche per gran parte della giornata senza successo testando idee diverse, ma sfortunatamente la maggior parte funziona solo sul framework completo e non su. CF.Net.
Qualsiasi idea sarebbe molto apprezzata.
Wow, grazie per quello. Una spiegazione estremamente utile e dettagliata. Hai certamente passato un po 'di tempo sull'argomento. –
@ctacke Mi è venuta una soluzione per la trasparenza che è molto vicina alla tua e che funziona sia nel designer che in fase di esecuzione. Recentemente mi sono reso conto che la mia soluzione non funzionava durante l'annidamento dei controlli contenitore perché la cosa "Parent.Parent" non funziona. Ho provato a passare "Parent.Parent" a questo.TopLevelControl, che funziona in fase di esecuzione ma non in fase di progettazione. Dove sei mai riuscito a trovare una soluzione per l'annidamento di controlli trasparenti all'interno dei controlli Container e il progettista ha ancora il rendering trasparente del tuo controllo? –
Ho rinunciato anche a tentare di ottenere il supporto del designer per i miei controlli anni fa. Non mi è mai sembrato così importante ed è sempre stato fragile.A volte avrebbe funzionato, altre volte no e mi sono ritrovato a bruciare giorni di tempo in realtà non facendo nulla di produttivo, quindi non mi sono mai preso la briga di disegnare i rettangoli in cui i controlli andranno. – ctacke