私は自分のオートコンプリートコンボボックスとテキストボックスに取り組んできました。最初に、テキストボックスまたはコンボボックスの .Text プロパティにあるものは何でも、部分文字列として含まれる一致を検索しました。これはユーザーにとって非常に直感的なアルゴリズムだったので、可能性のある一致を示す私の小さなボーダレス リストボックス オン フォーム ポップアップは、以下の可能性のある一致の部分文字列を強調表示する必要はありませんでした。
最終的には、オートコンプリート コントロールを使用して、次のような文字列を検索し始めました。
Bob -- Johnson -- 21 Coconut grove -- Age 43 -- Customer ID : 21253
ユーザーがボックスに「Bob Coconut」または「Bob Coco 42」と入力した場合、このレコードがドロップダウンに表示されるようにしたかったのは、最初のケースに「Bob」と「Coconut」が含まれているためです。 2 番目のケースでは、42 は含まれていませんが、「Bob」と「Coco」が含まれています。
提案に表示されるさまざまな部分文字列に色を付けることで、提案を照合して並べ替えるアルゴリズムをユーザーが理解できるようにしたいと考えています。現在、提案ポップアップ リストボックスに 1 つの項目を入力するコードを次に示します。
private void List_DrawItem(object sender, DrawItemEventArgs e)
{
Color bColor = e.BackColor;
if (e.State == DrawItemState.Selected)
{
e.Graphics.FillRectangle(new SolidBrush(this.PopupSelectionBackColor), e.Bounds);
e.Graphics.DrawString(" " + this.list.Items[e.Index].ToString(), e.Font, new SolidBrush(this.PopupSelectionForeColor), e.Bounds, StringFormat.GenericTypographic);
}
else
{
//e.DrawBackground();
e.Graphics.FillRectangle(new SolidBrush(this.BackColor), e.Bounds);
e.Graphics.DrawString(" " + this.list.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds, StringFormat.GenericTypographic);
}
}
私が理解する必要があるのは、一致する文字列で部分文字列の座標を見つける方法であり、それらを別の色として再描画するか、その上で何らかのグラフィカルアルゴリズムを実行して、長方形の背景色であるすべてのピクセルを含むテキストが変更されます。
私はGDI+に慣れていません。助言がありますか?