twitterでの@補完の実験。
.NetFrameworkだと、AutoCompleteをTextBoxに対してプロパティで簡単に設定できるようす。候補のリストも、FileSystemとかAllUrlとか選択できてしまうし、CustomSourceとかも選択できる(その場合は、指定のコレクションを渡すことができる)。
が、こいつはどうやら大文字小文字の区別をきちんとしてくれないっぽい?
ま、そんなこんなあったので、結局独自に実装するべく実験してみた。
List
すると、
tw ほげほげ @an
くらいまで入力すると、
tw ほげほげ @annin102
まで補完してくれるという感じ。
ただ、これだけだと何の役にも立たない。twitterに向けて文章を送信するための仕組みが必要。
これのが大変っちゃ大変。
ちなみに、私のTwitter IDは http://twitter.com/annin102 。
String part = ""; int textLengthOld = 0; List<String> screen_names; private void textBox1_TextChanged(object sender, EventArgs e) { if (textBox1.Text.Length < textLengthOld) { textLengthOld = textBox1.Text.Length; return; } String text = textBox1.Text; // 開始がtwの場合補完の対象。 if (text.StartsWith("tw ")) { // 行末が、@ + screen_name 候補の場合は補完を試みる。 System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("@[0-9a-zA-Z_]+$"); if (reg.Match(text).Success) { String[] splited = text.Split('@'); part = splited[splited.Length - 1]; List<String> matchList = screen_names.FindAll(isPartOfScreenName); if (matchList.Count == 1) { textBox1.Text = text.Substring(0, textBox1.Text.Length - part.Length) + matchList[0] + " "; } textBox1.Select(textBox1.Text.Length, 0); } } } private Boolean isPartOfScreenName(String s) { if (s.StartsWith(part)) return true; else return false; }