using System; using System.Collections.Generic; using System.Drawing; using System.Text; namespace AutocompleteMenuNS { /// /// Item of autocomplete menu /// public class AutocompleteItem { public object Tag; string toolTipTitle; string toolTipText; string menuText; /// /// Parent AutocompleteMenu /// public AutocompleteMenu Parent { get; internal set; } /// /// Text for inserting into textbox /// public string Text { get; set; } /// /// Image index for this item /// public int ImageIndex{get; set; } /// /// Alignment. The direction the text shows. /// public StringAlignment Alignment { get; set; } /// /// Title for tooltip. /// /// Return null for disable tooltip for this item public virtual string ToolTipTitle { get { return toolTipTitle; } set { toolTipTitle = value; } } /// /// Tooltip text. /// /// For display tooltip text, ToolTipTitle must be not null public virtual string ToolTipText { get { return toolTipText; } set { toolTipText = value; } } /// /// Menu text. This text is displayed in the drop-down menu. /// public virtual string MenuText { get { return menuText; } set { menuText = value; } } public AutocompleteItem() { ImageIndex = -1; } public AutocompleteItem(string text):this() { Text = text; Alignment = StringAlignment.Near; } public AutocompleteItem(string text, int imageIndex) : this(text) { this.ImageIndex = imageIndex; } public AutocompleteItem(string text, int imageIndex, string menuText) : this(text, imageIndex) { this.menuText = menuText; } public AutocompleteItem(string text, int imageIndex, string menuText, string toolTipTitle, string toolTipText) : this(text, imageIndex, menuText) { this.toolTipTitle = toolTipTitle; this.toolTipText = toolTipText; } /// /// Returns text for inserting into Textbox /// public virtual string GetTextForReplace() { return Text; } /// /// Compares fragment text with this item /// public virtual CompareResult Compare(string fragmentText) { if (Text.StartsWith(fragmentText, StringComparison.InvariantCultureIgnoreCase) && Text != fragmentText) return CompareResult.VisibleAndSelected; return CompareResult.Hidden; } /// /// Returns text for display into popup menu /// public override string ToString() { return menuText ?? Text; } /// /// This method is called after item was inserted into text /// public virtual void OnSelected(SelectedEventArgs e) { } public virtual void OnPaint(PaintItemEventArgs e) { using(var brush = new SolidBrush(e.IsSelected ? e.Colors.SelectedForeColor : e.Colors.ForeColor)) e.Graphics.DrawString(ToString(), e.Font, brush, e.TextRect, new StringFormat() {Alignment = Alignment}); } } public enum CompareResult { /// /// Item do not appears /// Hidden, /// /// Item appears /// Visible, /// /// Item appears and will selected /// VisibleAndSelected } }