Listview transparente

Signaler
Messages postés
7
Date d'inscription
dimanche 27 juillet 2003
Statut
Membre
Dernière intervention
5 avril 2005
-
Messages postés
7
Date d'inscription
dimanche 27 juillet 2003
Statut
Membre
Dernière intervention
5 avril 2005
-
Salut!!
Bon, alors voilà j'ai un petit problème.....J'ai une WinForm avec une background image. Dans cette form, j'ai un panel transparent qui contient une listView. Comment faire pour que cette listView soit elle aussi transparente? Merci d'avance!!!!

10 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
Voici peut-etre une piste :



class TransparentListView : ListView

{

public TransparentListView()

{

}



override protected CreateParams CreateParams

{

get

{

CreateParams cp = base.CreateParams;

cp.ExStyle |= 0x20;

return cp;

}

}



override protected void OnPaintBackground( PaintEventArgs e )

{

}

}


Mx
Messages postés
7
Date d'inscription
dimanche 27 juillet 2003
Statut
Membre
Dernière intervention
5 avril 2005

Merci pour cette piste, je vais voir ce que je peux faire.....
Messages postés
7
Date d'inscription
dimanche 27 juillet 2003
Statut
Membre
Dernière intervention
5 avril 2005

Re...
Bon alors je croyais avoir résolu mon problème de listView Transparente en faisant un override de la méthode WndProc et de la propriété BackColor :



public
override
Color BackColor


{



get


{



return
base.BackColor;


}



set


{



if (
value ==
Color.Transparent)



this.SetStyle(
ControlStyles.UserPaint |
ControlStyles.SupportsTransparentBackColor,
true);


BackColor =
value;


}


}



protected
override
void WndProc(
ref
Message m)


{



base.WndProc(
ref m);



if (m.Msg == 20 )


{



this.SetStyle(
ControlStyles.OptimizedDoubleBuffer,
true);



this.SetStyle(
ControlStyles.UserPaint,
true);



this.SetStyle(
ControlStyles.SupportsTransparentBackColor,
true);



Graphics g =
Graphics.FromHdcInternal(m.WParam);



this.OnPaintBackground(
new
PaintEventArgs(g,
this.ClientRectangle));


g.Dispose();


// this.SetStyle(ControlStyles.UserPaint |ControlStyles.SupportsTransparentBackColor, false);



return;


}

Ca compile bien mais au moment ou je veux changer le backColor de ma ListView il me dit que c'est impossible, à cause d'une StackOverflowException......Je vois pas d'où ça peut venir.....Vous pouvez m'aider un peu sur ce coup-là aussi??? Merci d'avance!!!!!
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
Il y a un StackOverflowException parce que le "Set" de ton accesseur tourne en boucle !

Jvais essayer de voir ce qu'il se passe

Mx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
Et c'est logique:



Quand dans le set tu fais "BackColor = value;" ca va rappeler la
méthode set, qui va la rappeler, qui va la rappeler... Et puis hop,
StackOverflow ;)


Mx
Messages postés
7
Date d'inscription
dimanche 27 juillet 2003
Statut
Membre
Dernière intervention
5 avril 2005

Ok, j'avais pas capté ça...le coup du truc en boucle....mais alors comment je peux faire pour qu'il tourne plus en boucle?? Suis un petit peu larguée sur ce coup là.....
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
private Color tempColor,

public

Color TempColor

{


set


{

if (
value ==
Color.Transparent)



this.SetStyle(
ControlStyles.UserPaint |
ControlStyles.SupportsTransparentBackColor,
true);





BackColor = value
;

}

}



Et tu changes ton BackColor via TempColor

Est-ce que ca pourrait marcher ?

Mx
Messages postés
7
Date d'inscription
dimanche 27 juillet 2003
Statut
Membre
Dernière intervention
5 avril 2005

Merci grandement....Ca marche, ma listview est bien transparente....Peut être trop même, vu que maintenant quand j'y ajoute des ListItems (c'est quand même le principe de la listView, contenir des items......) bé ils sont bien présents mais pas affichés à l'écran.....Une autre idée de génie pour me sauver la vie????
Merci d'avance (encore une fois......)
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
Ouille ^^



Bah, la comme ca je vois pas trop ce qui peut clocher... :/

Tu as pas overridé le OnPaint, ou je ne sais pas quoi, qui génerait l'affichage ?

Mx
Messages postés
7
Date d'inscription
dimanche 27 juillet 2003
Statut
Membre
Dernière intervention
5 avril 2005

Bon alors, je viens d'étudier la question, et non ke ,'pverride aucune méthode...le seul code que j'ai est celui que j'ai filé....Mais il veut pas m'afficher les items de ma liste....
Comprend pas.....surtout qu'ils sont bien présents mes items!! Je peux les compter.....
Heeeeeeeeeeeeeeeeeelp