1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using MarkNet.Models;
namespace MarkNet.UC.Domaines
{
public partial class ucLstDom : UserControl
{
//Constante
private const int MOUSSEWHELLNBITEMS = 3;
private int _rangeItemsVues = 0;
private int _indexFirstItemShow = 0;
//propriétés
private List<Bd> _lstBd = null;
//constructeur
public ucLstDom()
{
InitializeComponent();
this.MouseWheel += new MouseEventHandler(UcLstDomMousseWheel);
}
//Méthode
public void SetListBd(List<Bd> lstBd)
{
if(lstBd.Count != 0)
{
this._lstBd = lstBd;
//On reset les valeurs dde l'ascenseur et position
this._rangeItemsVues = 0;
this._indexFirstItemShow = 0;
CalculItems(); //On recalul les valeurs concernant l'affichage
//On ajoute et affiche les items
AjoutItems(this._indexFirstItemShow = 0, this._indexFirstItemShow + this._rangeItemsVues);
}
}
public void CalculItems()
{
//calcul de la longueur des items vu en fct de la hauteur du control //nb = La hauteur du flp : la hauteur de l'item = à la plage visible
this._rangeItemsVues = (int)Math.Ceiling((double)(this.fLPListDomaines.Height / lstDomItem.LDIHEIGHT));
//3 cas
// -> nb = 0 => On ne fait rien
// -> nb <= au nb possible à montrer => On affiche toute la liste et on masque l'ascenseur -> méthode d'ajout
// -> nb > au nb possible à montrer : On set l'ascenseur sur bas de la longeur réelle des la liste
if (this._rangeItemsVues < this._lstDom.Count)
this.vSB.Maximum = this._lstDom.Count;
}
void AjoutItems(int firstShow, int lastShow)
{
// sécurité pour ne pas dépasser les index de la liste
if ( firstShow < 0 ) _indexFirstItemShow = firstShow = 0;
if (lastShow > _lstBd.Count) lastShow = _lstBd.Count;
List<Bd> temp = _lstBd.GetRange(firstShow, lastShow);
foreach (Bd d in temp)
{
lstBdItem it = new lstBdItem(d);
it.Name = d.Nom;
it.Margin = new Padding(0);
it.Anchor = AnchorStyles.Left & AnchorStyles.Top;
it.Width = fLPListBd.Width;
it.SelectionChanged += SelectionChangedfgh;
it.Click += ItemClicked;
this.fLPListBd.Controls.Add(it);
}
}
private void clean()
{
while(this.fLPListDomaines.Controls.Count != 0)
{
lstDomItem c = (lstDomItem)fLPListDomaines.Controls[0];
fLPListBd.Controls.Remove(c);
c.SelectionChanged -= SelectionChanged;
c.Click -= ItemClicked;
c.Dispose();
}
}
#region Gestion evenement control
private void UcLstDomMousseWheel(object sender, MouseEventArgs e)
{
fLPListDomaines.SuspendLayout();
this.clean(); //On vide le flowpanel pour le refaire
if(e.Delta > 0 ) //On remonte
{
//Calul du nouveau range
_indexFirstItemShow = _indexFirstItemShow - MOUSSEWHELLNBITEMS;
}
else //On descend
{
//Calul du nouveau range
_indexFirstItemShow = _indexFirstItemShow + MOUSSEWHELLNBITEMS;
}
AjoutItems(_indexFirstItemShow, _indexFirstItemShow + _rangeItemsVues);
fLPListDomaines.ResumeLayout();
}
} |
Partager