現在オフラインです。再接続するためにインターネットの接続を待っています

先頭の文字列を入力しても ComboBox コントロールの項目が選択されない

ベータ版情報
この資料では、マイクロソフトのベータ版製品について説明しています。この資料の情報は、この資料の発行時点のものであり、将来予告なしに変更することがあります。

このベータ版製品は、マイクロソフトの正規サポート対象外となっています。ベータ版のサポートについては、ベータ版製品に含まれるドキュメントを参照してください。または、ベータ版製品をダウンロードした Web サイトを参照してください。
現象
ComboBox コントロールの DropDownStyle プロパティを DropDownList に設定してから、実行時に ComboBox に項目の先頭の文字列を入力しても、ComboBox で選択される項目が入力した文字列と一致しません。ComboBox の項目は入力した最後の文字に基づいて選択されます。たとえば、ComboBox の項目が、[red]、[oak]、[rose] である場合、ComboBox に ro と入力すると、[rose] ではなく [oak] にフォーカスが設定されます。
原因
この問題は、ComboBox の検索が文字列全体ではなく、単一の文字に基づいて行われるために発生します。
回避策
この問題を回避するには、ComboBox に入力したすべての文字が含まれる項目の検索を行うコードを追加します。このコードでは、文字列全体と一致率の高い項目の選択も行う必要があります。定期的に検索テキストを消去するには、Timer コントロールを使用します。これを行うには、次の手順を実行します。
  1. Microsoft Visual Studio .NET または Microsoft Visual Studio 2005 を実行します。Visual Basic .NET、Visual Basic 2005、または Visual C# .NET を使用して新しい Microsoft Windows アプリケーションを作成します。

    デフォルトで Form1 が作成されます。
  2. ツールボックスから、Timer コントロールを Form1 にドラッグします。
  3. [プロパティ] ウィンドウで、Enabled プロパティを True に設定します。
  4. 次のステートメントをコードの変数宣言セクションに追加します。

    Visual Basic .NET または Visual Basic 2005
    Dim searchstr As String
    Visual C# .NET
    string searchstr;
  5. 次のコードを Form1 の Load イベントに追加します。

    Visual Basic .NET または Visual Basic 2005
    'set the timer interval and start the timerTimer1.Interval = 1000Timer1.Start()
    Visual C# .NET
    //set the interval  and start the timertimer1.Interval =1000;timer1.Start();
  6. 次のコードを Timer1 の Tick イベントに追加します。

    Visual Basic .NET または Visual Basic 2005
    'empty the string for every 1 secondssearchstr = ""
    Visual C# .NET
    //empty the string for every 1 secondssearchstr="";
  7. 次のコードを ComboBox1 の KeyUp イベントに追加します。

    Visual Basic .NET または Visual Basic 2005
          searchstr = searchstr & Chr(e.KeyValue)      ' If the Search string is greater than 1 then use custom logic      If searchstr.Length > 1 Then         Dim index As Integer         ' Search the Item that matches the string typed         index = ComboBox1.FindString(searchstr)         ' Select the Item in the Combo         ComboBox1.SelectedIndex = index      End If  
    Visual C# .NET
             searchstr = searchstr + Convert.ToChar(e.KeyCode);         // If the Search string is greater than 1 then use custom logic         if (searchstr.Length > 1)         {            int index;            // Search the Item that matches the string typed            index=comboBox1.FindString(searchstr);            // Select the Item in the Combo            comboBox1.SelectedIndex=index;         }
状況
この動作は仕様です。
詳細

現象の再現手順

  1. Microsoft Visual Studio .NET または Microsoft Visual Studio 2005 を実行します。Visual Basic .NET、Visual Basic 2005、または Visual C# .NET を使用して新しい Microsoft Windows アプリケーションを作成します。

    デフォルトで Form1 が作成されます。

    : Visual Basic 2005 では、コードを変更する必要があります。Windows フォーム プロジェクトを作成すると、デフォルトでプロジェクト用のファイルが 2 つ作成されます。フォームの名前が Form1 の場合、フォームを表すこの 2 ファイルの名前は Form1.vb および Form1.Designer.vb です。ユーザーによるコードの記述は Form1.vb ファイルで行います。Form1.Designer.vb ファイルには、Windows フォーム デザイナによってコードが記述されます。Windows フォーム デザイナは、Partial キーワードを使用して、Form1 を 2 つの異なるファイルに分けて実装します。この動作により、Windows フォーム デザイナが生成したコードが、ユーザーが記述したコード内に散在することがなくなります。

    Visual Basic 2005 の新しい言語機能強化の詳細については、以下の MSDN (Microsoft Developer Network) Web サイトを参照してください。部分クラスおよび Windows フォーム デザイナの詳細については、次のマイクロソフト Web サイトを参照してください。
  2. ツールボックスから、ComboBox コントロールを Form1 にドラッグします。
  3. [ComboBox1] を右クリックし、[プロパティ] をクリックします。
  4. [プロパティ] ウィンドウで、[DropDownStyle] をクリックし、このプロパティを DropDownList に設定します。
  5. [プロパティ] ウィンドウで、[Items] をクリックし、省略記号ボタン ([...]) をクリックします。
  6. [文字列コレクション エディタ] で、行を分けてそれぞれ redoakrose と入力し、[OK] をクリックします。
  7. [デバッグ] メニューの [開始] をクリックして、アプリケーションを実行します。
  8. [ComboBox1] に ro と入力します。
関連情報
関連情報について参照するには、次の MSDN Web サイトにアクセスしてください。

ComboBox.DropDownStyle プロパティ
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfSystemWindowsFormsComboBoxClassDropDownStyleTopic.asp
プロパティ

文書番号:814362 - 最終更新日: 05/11/2007 07:08:50 - リビジョン: 2.4

Microsoft .NET Framework 1.1, Microsoft .NET Framework 1.0, Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition

  • kbvs2005swept kbvs2005applies kbctrl kbcontrol kbproperties kbdisplay kbwindowsforms kbcombobox kbprb KB814362
フィードバック
ody>