Bonjour,j'ai vu plein de trucs avec tooltip et toujours avec l'utilisation de la souris
je developpe sous visual 2005
j'ai un datagridview dans lequel je rentre des données dans differentes colonnes et differentes lignes...
je voudrais que lorsque l'utilisateur arrive ds une cellule un tooltip (en gros un message d'aide s'affiche automatiquement) juste en dessous de l'endroit ou il se trouve.
en utilisant le tooltip de chaque cellule je ne parvient pas a les ouvrir (les montrer quand on arrive dans une case ( c seulement si on laisse la souris pointer dessus un pti bout de temps [utilisation classique des tooltiptext])
donc j'ai fait un truc comme ca :
private void mon_DataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
//MessageBox.Show(e.ColumnIndex.ToString());
if (e.ColumnIndex == libelle_Column1.Index)
{
infos_toolTip1.ToolTipTitle = libelle_Column1.HeaderText;
infos_toolTip1.Show("message1",this,position_cellule(e.ColumnIndex,e.RowIndex));
achat_mon_DataGridView1[e.ColumnIndex, e.RowIndex].ToolTipText = "message1";
}
else if (e.ColumnIndex == qte_Column1.Index && Class_params.modif_stock_facture)
{
infos_toolTip1.ToolTipTitle = qte_Column1.HeaderText;
infos_toolTip1.Show("message2", this, position_cellule(e.ColumnIndex, e.RowIndex));
achat_mon_DataGridView1[e.ColumnIndex, e.RowIndex].ToolTipText = "message2.";
}
else if (e.ColumnIndex == ht_Column1.Index)
{
infos_toolTip1.ToolTipTitle = ht_Column1.HeaderText;
infos_toolTip1.Show("message3", this, position_cellule(e.ColumnIndex, e.RowIndex));
achat_mon_DataGridView1[e.ColumnIndex, e.RowIndex].ToolTipText = "message3";
}
else
{
infos_toolTip1.Hide(this);
}
}
avec
Point position_cellule(int col_index, int row_index)
{
int y = 34 + achat_mon_DataGridView1.Top + achat_mon_DataGridView1.ColumnHeadersHeight;
y+=(row_index + 1) * (achat_mon_DataGridView1.RowTemplate.Height)-achat_mon_DataGridView1.VerticalScrollingOffset;
int x = 30+achat_mon_DataGridView1.Left + achat_mon_DataGridView1.RowHeadersWidth;
switch(col_index)
{
case 0:
x += 0;
break;
case 2:
x += libelle_Column1.Width + stock_Column1.Width;
break;
case 3:
x += libelle_Column1.Width + stock_Column1.Width+qte_Column1.Width;
break;
}
return new Point(x, y);
}
avec position_cellule qui essaie de calculer relativement ou se trouve la cellule
j'ai rajouté un pti truc si jamais ya le sscrollbar mais la ca marche pas bien l'info bulle remonte trop ...
AUtre probleme : le texte dans l'info bulle ne se "cale" pas bien , il y a des bouts qui manquent
sur la 1ere case ave message1 , la premiere fois c nickel
nesuite elle se redimensionne (moins larger et la il manque des bouts de texte ???)
si je n'utilise pas la propriété is balloon ca marche bien , tout le texte se met bien mais c moins joli
Comment faire pour obtneir un truc correct ???
Merci