0

ユーザーフレンドリーな自動提案テキストボックスを作成しようとしているテキストボックスを含む単純なフォームがあります..

現在のシナリオではAutoCompleteStringCollection、テキストボックスに入力された特定のテキストで始まる単語の提案をテキストボックスに表示させることができるクラスを使用しています。データベースからの文字列の一部が Textbox.Text と一致します。

現在、userInput を使用して、DB からのデータをフィルタリングできます。しかしdataView、フロント エンドで出力を表示することはまだできません。

KeyPress' ', KeyDown,KeyUpのようなすべてのテキスト ボックス イベントを試しTextChangedましたが、うまくいきません....

マイコード::

         public partial class Form2 : Form
        {
            AutoCompleteStringCollection autoCompletefromDB = new AutoCompleteStringCollection();
            AutoCompleteStringCollection searchResults = new AutoCompleteStringCollection();


            MyLinqDataContext dtcontext = new MyLinqDataContext();
          //  static string searchChar = "";
            SqlConnection con = new SqlConnection("Data Source=DATASERVER\\SQL2K8;Initial Catalog=VTMMedicalContent;Persist Security Info=True;User ID=vtm;Password=M3d!c@l");
            DataTable dTable = new DataTable();
            SqlCommand cmd;
            SqlDataAdapter da;
            DataView dtView;
            public Form2()
            {
                InitializeComponent();
            }

            private void Form2_Load(object sender, EventArgs e)
            {
                cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "select DiagnosisName from [VTMMedicalContent].[dbo].[DiagnosisMaster]";
                da = new SqlDataAdapter(cmd);
                da.Fill(dTable);
                dtView = new DataView(dTable);

            }

     //And My KeyPress Event Code..

 private void txtAutoComplete_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsControl(e.KeyChar))
            {
                dtView.RowFilter = dtView.Table.Columns[0].ColumnName + " Like '%" + e.KeyChar + "%'";
                foreach (DataRowView dtViewRow in dtView)
                    searchResults.Add(dtViewRow[0].ToString());

                txtAutoComplete.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
                txtAutoComplete.AutoCompleteSource = AutoCompleteSource.CustomSource;
                txtAutoComplete.AutoCompleteCustomSource = searchResults;
            }
            //MessageBox.Show("The Elements in searchResult are:" + searchResults.Count);
        }

KeyDownKeyUp、イベントで同じコードを書いてみましたTextChangedが、役に立ちません..:(

Form_Load でのみ機能しますが、単語の開始点に一致する提案のみが表示されます..

4

1 に答える 1

0

オートコンプリート TextBoxControl を作成する

オートコンプリート機能には、最初に設計された用途である Internet Explorer のアドレス ボックスから継承されたいくつかの癖があります。これには、リスト内の項目をクリックしたときに Enter キーを発行することも含まれます。IE のアドレス ボックスで Enter キーを押すと、入力した URL に移動します。

それについてできることは何もありません。ネイティブ インターフェイス (IAutoComplete2) には、動作方法を構成するためのオプションがほとんどありません。Windows メッセージを偽装して、キーストロークをテキスト ボックスに入力します。これは違いを見分ける方法の 1 つです。実際のキーはダウンしていません。次のように、GetKeyState() をピンボークすることで確認できるもの: 例として、好きなようにこれをいじることができます。

    private void textBox1_KeyDown(object sender, KeyEventArgs e) {
        if (e.KeyData == Keys.Enter && GetKeyState(Keys.Enter) < 0) {
            Console.WriteLine("Really down");
        }
    }

    [System.Runtime.InteropServices.DllImport("user32.dll")]
    private static extern short GetKeyState(Keys key);
于 2012-08-21T14:02:00.547 に答える