Lonicpp
Messages postés14Date d'inscriptionmercredi 20 mai 2009StatutMembreDernière intervention 8 juin 2009
-
2 juin 2009 à 15:33
Lonicpp
Messages postés14Date d'inscriptionmercredi 20 mai 2009StatutMembreDernière intervention 8 juin 2009
-
4 juin 2009 à 10:41
Bonjour,
Je conçoit actuellement un logiciel destiné à une entreprise, dans le but de mon stage. Mais voila, un problème viens d'arriver.
J'ai des données dans un listview, et je veux afficher ce listview dans un seul onglet de mon application. Problème, je ne trouve pas l'évènement qui me permettrait d'afficher le listview uniquement dans cet onglet.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 3 juin 2009 à 03:28
Salut,
Le tabcontrol envoie la notification TCN_SELCHANGE via le message WM_NOTIFY à la procédure de la fenêtre ou boite parente quand on change d'onglet en cliquant dessus. On peut récupérer le numéro de l'onglet courant en envoyant le message TCM_GETCURSEL avec SendMessage() au HWND du tabcontrol. Ainsi, on décidera de rendre visible ou non le listview avec ShowWindow() selon l'onglet voulu. Le listview et le tabcontrol ont le même parent. Le corps du tabcontrol doit être suffisamment gand pour contenir le listview.
Lonicpp
Messages postés14Date d'inscriptionmercredi 20 mai 2009StatutMembreDernière intervention 8 juin 2009 3 juin 2009 à 07:44
Salut racpp,
Merci pour ta réponse, concernant le listview, il est censé passer dans le tabcontrol, vu que je l'ai réduit et que je ne le vois plus dépasser de chaque côté du tabcontrol.
Pour le reste de la réponse, je n'ai pas vraiment saisi comment afficher le listview au dessus du tabcontrol, excusez mon incompréhension, je n'ai pas beaucoup d'expérience dans le c++ :)
Pouvez vous m'éclaircir ?
Merci,
Lonicpp.
Vous n’avez pas trouvé la réponse que vous recherchez ?
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 3 juin 2009 à 14:08
Que veux-tu dire exactement par "au dessus"?. Normalement, il n'y a rien de spécial à faire. Le listview est au même niveau que le tabcontrol. Si le listview est situé à l'intérieur du cadre du corps du tabcontrol, on a l'impression qu'il est au dessus.
Lonicpp
Messages postés14Date d'inscriptionmercredi 20 mai 2009StatutMembreDernière intervention 8 juin 2009 3 juin 2009 à 14:37
En fait j'ai pas fait un listview avec la boite à outlis, je l'ai créé directement à la main..
Donc je me retrouve avec la fonction "createMyListView()", que je ne sais pas où mettre.
La fonction est la suivante :
<hr size="2" width="100%" />private:
void CreateMyListView()
{
String^ variable_temporaire2;
//Lecture du fichier texte
String^ path = "c:\\pxrv.txt";
FileStream^ fs = File::OpenRead( path );
array^b2 = gcnew array(1000000);
UTF8Encoding^ temp = gcnew UTF8Encoding( true );
while ( fs->Read( b2, 0, b2->Length ) > 0 )
{
//On balance le contenu du fichier dans la variable "variable_temporaire"
variable_temporaire2 = System::Convert::ToString( temp->GetString( b2 ) );
}
//Fin Lecture du fichier texte
//On split la variable_temporaire
array<Char>^chars2 = {';'}; // Tableau des séparateurs, ici uniquement ';'
array<String^>^split2 = variable_temporaire2->Split( chars2 ); // words contenant votre chaine de caractères et chars les séparateurs
// Création de la listview
ListView^ listView1 = gcnew ListView;
listView1->Bounds = Rectangle(Point(20,20),System::Drawing::Size( 1000, 500 ));
// Permettre l'affichage des valeurs.
listView1->View = View::Details;
// Permettre a l'utilisateur de modifier les valeurs.
listView1->LabelEdit = true;
// Permettre a l'utilisateur de modifier la taille des colones.
listView1->AllowColumnReorder = true;
// Affichage des checkbox.
listView1->CheckBoxes = false;
// Sélectionner les éléments et les sous éléments quand on a fait la séléction.
listView1->FullRowSelect = true;
// Affichage des lignes.
listView1->GridLines = true;
// Ordre de tri des éléments.
listView1->Sorting = SortOrder::Ascending;
int nombreaff = System::Convert::ToInt16(split2[0])*48;
for (int i=1; i<nombreaff; i++)
{
if (split2[i] == "Laurent D.")
{
// Create three items and three sets of subitems for each item.
ListViewItem^ item1 = gcnew ListViewItem( split2[i],0 );
// Place a check mark next to the item.
item1->Checked = true;
item1->SubItems->Add( split2[i+3] );
item1->SubItems->Add( split2[i-3] );
item1->SubItems->Add( "3" );
//Add the items to the ListView.
//String^ taille_tbl = "{item1,item2,item3}";
array<ListViewItem^>^temp1 = {item1};
listView1->Items->AddRange( temp1 );
// Add the ListView to the control collection.
this->Controls->Add( listView1 );
}
}
}
<hr size="2" width="100%" />(désolé je n'ai pas trouvé la balise code)
Je cherche l'emplacement où doit se trouver mon appel de fonction, pour que le listview soit dessiné sur mon onglet.
Dans les évènements j'avais trouvé click, mais quand je clic sur l'onglet ça m'affiche bien mon listview, mais derrière... :D
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 3 juin 2009 à 15:01
Désolé, je pensais que tu travaillais en Win32 API. Une capture d'écran de ton application serait préférable pour nous permettre de voir la nature du problème.