3 using System.Collections.Generic;
6 using System.Windows.Forms;
7 using System.Windows.Input;
10 namespace FooEditEngine.Windows
15 public class AutoCompleteBox : AutoCompleteBoxBase
17 private string inputedWord;
18 private ListBox listBox1 = new ListBox();
24 /// <param name="textbox">対象となるテキストボックス</param>
25 internal AutoCompleteBox(FooTextBox textbox) : base(textbox.Document)
28 this.listBox1.MouseDoubleClick += ListBox1_MouseDoubleClick;
29 this.listBox1.KeyDown += listBox1_KeyDown;
30 this.listBox1.Height = 200;
31 this.listBox1.Visible = false;
32 textbox.Controls.Add(this.listBox1);
33 this.doc = textbox.Document;
37 /// オートコンプリートの対象となる単語のリスト
39 public override CompleteCollection<ICompleteItem> Items
43 return (CompleteCollection<ICompleteItem>)this.listBox1.DataSource;
47 this.listBox1.DisplayMember = CompleteCollection<ICompleteItem>.ShowMember;
48 this.listBox1.ValueMember = CompleteCollection<ICompleteItem>.ShowMember;
49 this.listBox1.DataSource = value;
54 /// 自動補完リストが表示されているかどうか
56 protected override bool IsCloseCompleteBox
60 return !this.listBox1.Visible;
67 /// <param name="ev"></param>
68 protected override void RequestShowCompleteBox(ShowingCompleteBoxEventArgs ev)
70 this.inputedWord = ev.inputedWord;
71 this.listBox1.SelectedItem = ((CompleteCollection<ICompleteItem>)this.listBox1.DataSource)[ev.foundIndex];
72 this.listBox1.Visible = true;
73 this.listBox1.Location = ev.CaretPostion;
79 protected override void RequestCloseCompleteBox()
81 this.listBox1.Visible = false;
84 internal bool ProcessKeyPress(FooTextBox textbox, KeyPressEventArgs e)
86 if (this.isReqForceComplete && e.KeyChar == ' ')
88 this.OpenCompleteBox(string.Empty);
90 } else if (!this.IsCloseCompleteBox && (e.KeyChar == '\r')){
91 this.RequestCloseCompleteBox();
92 CompleteWord selWord = (CompleteWord)this.listBox1.SelectedItem;
93 this.SelectItem(this, new SelectItemEventArgs(selWord, this.inputedWord, this.Document));
100 bool isReqForceComplete = false;
102 internal bool ProcessKeyDown(FooTextBox textbox, KeyEventArgs e,bool isCtrl,bool isShift)
104 if (this.IsCloseCompleteBox)
106 if (e.KeyCode == Keys.Space && isCtrl)
108 this.isReqForceComplete = true;
117 this.RequestCloseCompleteBox();
121 if (this.listBox1.SelectedIndex + 1 >= this.listBox1.Items.Count)
122 this.listBox1.SelectedIndex = this.listBox1.Items.Count - 1;
124 this.listBox1.SelectedIndex++;
127 if (this.listBox1.SelectedIndex - 1 < 0)
128 this.listBox1.SelectedIndex = 0;
130 this.listBox1.SelectedIndex--;
133 this.RequestCloseCompleteBox();
134 CompleteWord selWord = (CompleteWord)this.listBox1.SelectedItem;
135 this.SelectItem(this, new SelectItemEventArgs(selWord, this.inputedWord, this.Document));
143 private void ListBox1_MouseDoubleClick(object sender, MouseEventArgs e)
145 this.listBox1.Visible = false;
146 CompleteWord selWord = (CompleteWord)this.listBox1.SelectedItem;
147 this.SelectItem(this, new SelectItemEventArgs(selWord, this.inputedWord, this.Document));
150 void listBox1_KeyDown(object sender, KeyEventArgs e)
152 if (e.KeyCode == Keys.Enter)
154 this.listBox1.Visible = false;
155 CompleteWord selWord = (CompleteWord)this.listBox1.SelectedItem;
156 this.SelectItem(this, new SelectItemEventArgs(selWord, this.inputedWord, this.Document));