si può sempre avere un StatusStrip
e utilizzando i CellMouseEnter
e CellMouseLeave
eventi impostati e rimuovere (rispettivamente) la spiegazione dalla striscia di stato.
private void dgvCellMouseEnter(object sender, DataGridViewCellEventArgs e)
{
statusStrip1.Text = (sender as DataGridView)[e.ColumnIndex, e.RowIndex].ToolTipText;
}
private void dgvCellMouseLeave(object sender, DataGridViewCellEventArgs e)
{
statusStrip1.Text = "";
}
Come caratteristica aggiuntiva, si può dimostrare che la cellula ha informazioni "extra", mostrando un piccolo segno, come fa Excel. Ecco un piccolo frammento di codice che uso per fare la stessa identica cosa:
private void dgvCellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex != -1) && (e.RowIndex != -1)
{
DataGridViewCell dgvCell = (sender as DataGridView)[e.ColumnIndex, e.RowIndex];
Pen greenPen = new Pen(Color.Green, 2);
Boolean hasTooltip = !dgvCell.ToolTipText.Equals("");
Boolean hasCompleted = (dgvCell.Tag as CellInfo).complete; // CellInfo is a custom class
if (hasTooltip) && (hasCompleted)
{
e.Handled = true;
e.Paint(e.ClipBounds, e.PaintParts);
e.Graphics.DrawRectangle(Pens.Blue, e.CellBounds.Left + 5, e.CellBounds.Top + 2, e.CellBounds.Width - 12, e.CellBounds.Height - 6);
e.Graphics.DrawRectangle(greenPen, e.CellBounds.Left + 1, e.CellBounds.Top + 1, e.CellBounds.Width - 3, e.CellBounds.Height - 3);
}
else if (hasTooltip)
{
e.Handled = true;
e.Paint(e.ClipBounds, e.PaintParts);
e.Graphics.DrawRectangle(Pens.Blue, e.CellBounds.Left, e.CellBounds.Top, e.CellBounds.Width - 2, e.CellBounds.Height - 2);
}
else if (hasCompleted)
{
e.Handled = true;
e.Paint(e.ClipBounds, e.PaintParts);
e.Graphics.DrawRectangle(greenPen, e.CellBounds.Left + 1, e.CellBounds.Top + 1, e.CellBounds.Width - 3, e.CellBounds.Height - 3);
}
}
}
Questo codice disegna un bordo blu intorno alla cella se hasTooltip
è vero, un bordo verde se hasCompleted
è vero, ed entrambi i bordi (con quello verde dentro) se entrambi sono vere.
La cella mostrerà che è disponibile un suggerimento? – CJ7
No, non lo sarà, tuttavia puoi farlo anche aggiungendo un CssClass alla cella. CssClass = "has-tooltip". Quindi usa la tua creatività e aggiungi un'icona "i" per indicare che ci sono altre informazioni. – Marko
@Marko: questo non è fondamentalmente uno smart tag? – CJ7