In windows form combo box control sometimes while adidng items dynamically we have items whose width is greater than width of combox box control. In this case for making UI more user friendly we can show tooltip over such item. Here is the sample C# code to display such tooltip:
- Add a Tooltip control on the form.
- Add following code :
this.combo_box1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.combo_box1.DrawMode = DrawMode.OwnerDrawFixed; this.combo_box1.DrawItem += new DrawItemEventHandler(combo_box1_DrawItem); this.combo_box1.DropDownClosed += new EventHandler(combo_box1_DropDownClosed); this.combo_box1.MouseLeave += new EventHandler(combo_box1_Leave); void combo_box1_DrawItem(object sender, DrawItemEventArgs e) { if (e.Index < 0) { return; } string text = combo_box1.GetItemText(combo_box1.Items[e.Index]); e.DrawBackground(); using (SolidBrush br = new SolidBrush(e.ForeColor)) { e.Graphics.DrawString(text, e.Font, br, e.Bounds); } if ((e.State & DrawItemState.Selected) == DrawItemState.Selected && combo_box1.DroppedDown) { if (TextRenderer.MeasureText(text, combo_box1.Font).Width > combo_box1.Width) { toolTip1.Show(text, combo_box1, e.Bounds.Right, e.Bounds.Bottom); } else { toolTip1.Hide(combo_box1); } } e.DrawFocusRectangle(); } private void combo_box1_DropDownClosed(object sender, EventArgs e) { toolTip1.Hide(combo_box1); } private void combo_box1_Leave(object sender, EventArgs e) { toolTip1.Hide(combo_box1); } private void combo_box1_MouseHover(object sender, EventArgs e) { if (!combo_box1.DroppedDown && TextRenderer.MeasureText(combo_box1.SelectedItem.ToString(), combo_box1.Font).Width > combo_box1.Width) { toolTip1.Show(combo_box1.SelectedItem.ToString(), combo_box1, combo_box1.Location.X, combo_box1.Location.Y); } }
Great post! Saved me heaps of time! Thank you!
ReplyDeleteGood post
ReplyDelete