Bonjours, Alors voilà mon problème, je voudrais trier ma Clist mais j'ai quelques problèmes. J'explique vite fait le principe.
Je pars d'une liste vide, j'insére un élement .
ensuite pour insérer un 2eme élément.Je regarde, si la date limite de l'objet à insérer est plus petite que la date de l'élement temp. Si oui je l'insere avant l'élément temp sinon je continue si sa sort du for sans avoir été inséré, je l'insere en fin.
En gros, dès que je trouve une date supérieure à la date de l'élément que je veux insérer, j'insére et je m'arrete.
cas d'utilisation:
Je rentre une tache dans le futur (tache 2) puis je rentre une tache dans le passé (tache 0) le tri se fait bien. J'entre une tache dans le présent (tache 1),
celà devrai donnée dans mon affichage.
tache 0
tache 1
tache 2
mais cela donne
tache1
tache 0
tache 2
j'ai fait plein de tentative mais ou le tri s'effectu mal ou j'ai droit a une bonne vieille erreur de pointeur (je pense que c'est ma position qui essaie d'aller trop loin) mais là avec ce code, il ne plante pas mais le tri ne s'effectue pas. Enfin si on insère des taches qui ce suivent dans l'ordre chronologique ou anti-chronologique celà fonctionne. Voilà merci.
bool
insert=false; CString type;
m_type.GetLBText(m_type.GetCurSel(),type);
int imp = m_importance.GetPos(); //renvois la position du slider,donc l'importance CTime tmp;
CTache tache(type,m_nom,m_description,tmp.GetCurrentTime(),m_limite,imp);
CMainFrame* pFrame = (CMainFrame*) theApp.m_pMainWnd;
CWinProjetDoc* pDoc = (CWinProjetDoc*)pFrame->GetActiveDocument();
POSITION pos = pDoc->liste_taches.GetHeadPosition();
//POSITION posfin = pDoc->liste_taches.GetTailPosition(); if(!pDoc->liste_taches.IsEmpty()) {
//temp = pDoc->liste_taches.GetNext(pos); for(int i=0;(!insert)&&(i < pDoc->liste_taches.GetCount() );i++)//tri i=0 , count=1 {
temp = pDoc->liste_taches.GetNext(pos);
affiche.Format("i=%d, getcount=%d",i,pDoc->liste_taches.GetCount());
if(tache.Getlimite() < temp.Getlimite())//détermine si la tache rentré est avant la tache temp {
if(i>0) {
//pDoc->liste_taches.GetNext(pos); MessageBox("ici 1","Erreur!",MB_OK|MB_ICONSTOP);
//MessageBox("yes","pl"); pDoc->liste_taches. InsertBefore(pos,tache);
MessageBox("ici 2","Erreur!",MB_OK|MB_ICONSTOP);
insert=
true; MessageBox("ici 3","Erreur!",MB_OK|MB_ICONSTOP);
}
else {
pDoc->liste_taches.AddHead(tache);
insert=
true; }
}
//temp = pDoc->liste_taches.GetNext(pos); MessageBox(temp.Getnom(),"Erreur!",MB_OK|MB_ICONSTOP);
}
if(!insert) pDoc->liste_taches.AddTail(tache);
}
Merci