問題タブ [combobox]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - WPFでのFF3AwesomeBarのような動作
WPFでFirefox3AwesomeBarと同様の動作を実装しようとしています。ドロップダウンをAwesomeBarのドロップダウンのように見せるためのDataTemplateを使用するComboBoxがありますが、正しい動作を取得する方法がわかりません。
私がしたいのは、ユーザーがComboBoxのTextBoxビットに検索を入力してから、ドロップダウンで結果を徐々に絞り込むことです。私はおそらくその一部をデータベースクエリで動作させることができると思います(結果はデータベースから取得されるため)が、取得したいのは、ユーザーが入力を開始するとすぐに開くドロップダウンビットです(Firefoxの場合のように) 3)次に、リストの最初の項目が自動的に選択され、リスト内の他の項目が矢印キーを使用するか、それらをクリックして選択できるようになります。
アップデート:
(IsDropDownOpen = trueを使用して)ComboBoxをドロップダウンさせるプログラム的な方法を見つけましたが、他にもいくつか問題があります。
最初に何かを入力すると、ドロップダウンしますが、入力しているものに最も近い一致が選択されません。次に、アイテムを一意に選択するものを入力すると、自動的に閉じて、SelectedItemChangedメソッドが実行されます。コードを実際にクリックするか、Enterキーを押したときにのみ、コードを閉じて実行したいと思います(上矢印または下矢印を使用してコードを選択しただけではありません)。私がやりたいことをそれを実行させる方法について何かアイデアはありますか?それが十分に明確でない場合、私はより多くの情報を与えることができます。
wpf - 利用可能なネイティブWPFMultiselectコンボボックスはありますか?
サードパーティでもかまいません。
ありがとう
c# - ChildForm からデータを追加した後の ComboBox の更新
Access データベースに新しいデータを追加した後、ComboBox を更新できないようです。
新しいデータを追加するために使用するコードは次のとおりです。
c# - C# コンボボックスまたはテキストボックスのオートコンプリート エントリを動的に変更するにはどうすればよいですか?
C# にコンボボックスがあり、オートコンプリートの提案を使用したいのですが、有効なエントリが多すぎてAutoCompleteStringCollection
起動時に入力できないため、ユーザーの入力に応じてオートコンプリートのエントリを変更できるようにしたいと考えています。
例として、ユーザーに名前を入力させているとします。可能な名のリスト ("Joe"、"John") と姓のリスト ("Bloggs"、"Smith") がありますが、それぞれが 1000 個ある場合、可能な文字列は 100 万個になりますオートコンプリート エントリに入れるには多すぎます。したがって、最初は最初の名前だけを提案として ("Joe", "John") たいと思います。次に、ユーザーが最初の名前 ("Joe") を入力したら、既存のオートコンプリート エントリを削除して置き換えます。選択された名前とそれに続く可能な姓 ("Joe Bloggs"、"Joe Smith") で構成される新しいセットを使用してそれらを作成します。これを行うために、次のコードを試しました。
ただし、これは正しく機能しません。Clear() を呼び出すと、コンボ ボックスに次の文字が表示されるまでオート コンプリート メカニズムが「オフ」になるようですが、もちろん、次の文字が表示されると、上記のコードは Clear() を再度呼び出すため、ユーザーは決して実際にオートコンプリート機能が表示されます。また、コンボ ボックスの内容全体が選択されるため、キーを押すたびに既存のテキストを選択解除する必要があり、使用できなくなります。Clear() の呼び出しを削除すると、オートコンプリートは機能しAddRange()
ますが、追加した新しい提案がオートコンプリートのドロップダウンに表示されないため、呼び出しは効果がないようです。
これに対する解決策を探していて、さまざまな提案がありましたが、どれも機能しません。オートコンプリート機能が無効になっているように見えるか、新しい文字列が表示されません。ここに私が試したことのリストがあります:
BeginUpdate()
弦交換前と交換後の呼び出しEndUpdate()
。Remove()
Clear() の代わりにすべての既存の文字列を呼び出します。- 文字列の更新中にコンボボックスからテキストをクリアし、後で追加し直します。
- 文字列を変更している間は「なし」に設定
AutoCompleteMode
し、後で「SuggestAppend」に戻します。 TextUpdate
の代わりにまたはKeyPress
イベントをフックしTextChanged
ます。- 毎回
AutoCompleteCustomSource
新しいものと既存のものを交換します。AutoCompleteStringCollection
さまざまな組み合わせであっても、これらのどれも役に立ちませんでした。 SpenceComboBox
は、オートコンプリートで使用する文字列のリストを取得する関数をオーバーライドしてみることを提案しました。リフレクターを使用して、ComboBox
有望に見えるクラスGetStringsForAutoComplete()
内のいくつかのメソッドを見つけましたSetAutoComplete()
が、それらは両方ともプライベートであるため、派生クラスからアクセスできません。私はそれ以上取ることができませんでした。
ComboBox
オートコンプリート インターフェースは同じなので、をに置き換えてTextBox
みましたが、動作が少し異なることがわかりました。を使用するTextBox
と、オートコンプリートの追加部分が適切に機能するように見えますが、提案部分は機能しません。提案ボックスは一時的に点滅しますが、すぐに消えます。
そこで、「さて、サジェスト機能なしで生きて、代わりに追加を使用する」と思ったのですが、AutoCompleteMode
追加に設定すると、アクセス違反の例外が発生します。SuggestAppend
サジェストでも同じことが起こります。サジェスト部分が正しく動作しなくても、例外をスローしない唯一のモードはです。
C# マネージ コードを使用する場合、アクセス違反の例外を取得することは不可能であると考えられていました。 Avramは、これを修正するために「ロック」を使用することを提案しましたが、何をロックすればよいかわかりAutoCompleteStringCollection
ません。ComboBox
またはもロックしようとしましTextBox
たが、どちらも役に立ちませんでした。私が理解しているように、ロックは他のロックを防ぐだけなので、基になるコードがロックを使用していない場合、ロックを使用しても違いはありません。
このすべての結果は、現在、ダイナミックオートコンプリートでaTextBox
または aを使用できないことです。ComboBox
どうすればこれを達成できるかについての洞察を持っている人はいますか?
アップデート:
私はまだこれを機能させていませんが、さらにいくつか発見しました。たぶん、これのいくつかは、他の誰かが解決策を考え出すきっかけになるでしょう.
ComboBox
オートコンプリート インターフェースは同じなので、をに置き換えてTextBox
みましたが、動作が少し異なることがわかりました。を使用するTextBox
と、オートコンプリートの追加部分が適切に機能するように見えますが、提案部分は機能しません。提案ボックスは一時的に点滅しますが、すぐに消えます。
そこで、「さて、サジェスト機能を使わずに Append を使用することにしよう」と考えましたが、AutoCompleteMode
Append に設定すると、アクセス違反の例外が発生します。SuggestAppend
サジェストでも同じことが起こります。サジェスト部分が正しく動作しなくても、例外をスローしない唯一のモードはです。
C# マネージ コードを使用する場合、アクセス違反の例外を取得することは不可能であると考えられていましたが、いずれにせよ、現在、動的オート コンプリートでaTextBox
または aを使用することはできません。ComboBox
どうすればこれを達成できるかについての洞察を持っている人はいますか?
更新 2:
ワーカー スレッドでオートコンプリートを変更したり、PostMessage() 型の動作をシミュレートするために使用したりするなど、さまざまなことを試した後、BeginInvoke()
最終的にあきらめて、リスト ボックスを使用して独自のオート コンプリート ドロップダウンを実装しました。組み込みのものよりもはるかに応答性が高く、組み込みのものを機能させるために費やした時間よりも少ない時間でした。自分で実装します。
c# - 選択したアイテムをWPFコンボボックスで非表示にするにはどうすればよいですか?
開いたWPFコンボボックスから選択したアイテムを非表示にしたいのですが、基本的には次の代わりに表示します。
これ:
これはどのように行うことができますか?
wpf - ComboBox で null 値を選択できないのはなぜですか?
WPF では、ComboBox から "null" 値を (マウスで) 選択することはできないようです。編集明確にするために、これは.NET 3.5 SP1です。
ここに私が何を意味するかを示すコードがあります。まず、C# 宣言:
次に、私の Window1 XAML:
そして最後に、私の Window1 クラス:
私と一緒に?項目が Bar インスタンスのリストにバインドされている ComboBox があり、そのうちの 1 つは null です。ウィンドウを Foo のインスタンスにバインドし、ComboBox はその Bar プロパティの値を表示しています。
このアプリを実行すると、デフォルトで Foo.Bar が null であるため、ComboBox は空の表示で開始されます。それはいいです。マウスを使用して ComboBox をドロップダウンし、「Hello」項目を選択すると、それも機能します。しかし、リストの一番上にある空の項目を再度選択しようとすると、ComboBox が閉じて、以前の値の "Hello" に戻ります!
矢印キーで null 値を選択すると期待どおりに機能し、プログラムで設定することもできます。動作しないのはマウスで選択することだけです。
簡単な回避策は、null を表す Bar のインスタンスを作成し、それを IValueConverter で実行することだとわかっていますが、マウスで null を選択しても WPF の ComboBox で機能しない理由を誰かが説明できますか?
c# - データバインドされた WPF ComboBox のテキストボックス部分に表示されるフィールドを制御します
データバインドされた WPF に ComboBox があり、各項目の表示方法を制御するデータ テンプレートがあります。各項目が 2 ビットのテキスト (Name および Path プロパティ用) と 1 つの画像 (Icon プロパティ用) で表示されるようにしました。
ComboBox から項目を選択すると、ComboBox のテキスト ボックス ビットが「TestWPF.Result」に変わります。これは、ComboBox に入力したクラスの名前です。
次の 2 つのいずれか (または両方) に興味があります。
そこにフィールドの1つの値を表示するように変更するにはどうすればよいですか(たとえば、クラスの名前ではなく名前フィールドの値を表示するようにします)?
アイテムのリストと同じ DataTemplate を使用することは可能ですか?アイテムを選択すると、アイテムのリストに表示されるのと同じように、閉じた ComboBox に表示されます。基本的に、ShowResults という DataTemplate と、そのテンプレートを使用する ComboBox があります。ComboBox で選択したアイテムの詳細を表示する必要がある別の ContentControl も追加しましたが、ComboBox のテキスト ボックスを置き換えるためにそれを取得したいと考えています。
アップデート:
最初の答えをありがとう。あなたが説明したように、別の ContentControl を使用してみましたが、正常に動作します。問題は、ComboBox のテキストボックス部分をこの ContentControl に置き換える方法です。それに関するヒントは大歓迎です。
また、ComboBox コントロールのテキストボックス ビットを ContentControl とテキストボックスの混合物に置き換えて、テキスト ボックスに入力して ComboBox から項目を選択することはできますが、ドロップダウンを閉じると残りの部分が表示されます。 ContentControl ビットには、残りのテキストとアイコンが取り込まれます。それが理にかなっていることを願っています-そうでない場合は質問してください!
コード:
コードを投稿するように求められたので、ここに掲載します。絶対に関連性がないことがわかっているものは削除しようとしましたが、何が関連性があるか正確にはわからないので、疑わしい場合は残しました.
wpf - ListBox内のすべてのComboBoxは、いずれか1つが変更されると変更されます
カスタムタイプListBox
のにバインドされているフォームがあります。ObservableCollection
各アイテム内にはComboBox
、列挙型へのバインドがあります。ウィンドウがロードされると、すべてのComboBox
esがデフォルトで特定の値になります。いずれか1つを(コードからではなくUIから)変更すると、SelectedItem
他のすべてのComboBox
esが同じに変更されSelectedItem
ます。
何が間違っているのかわかりません。これを処理している現在のXAMLは次のとおりです。
とListBox
:
CollectionView
;へのバインドなど、いくつかの異なるオプションを試しました。しかし、何も機能していないようです。誰かが私の間違いを指摘できますか?
ありがとう!
c# - テキストのどこでも(最初だけでなく)WPFのComboBoxのオートコンプリート
私は WPF に ComboBox を持っており、これをかなりいじりました (カスタム テンプレートとカスタム アイテム テンプレートがあります)。ComboBox に入力すると、フィルタリングが行われることを除いて、希望どおりに機能するところまで到達しましたが、入力したものがアイテムの名前を開始すると仮定してフィルターのみが実行されますコンボボックス。
たとえば、ComboBox に「Windows Media Player」という項目がある場合、「Windows Media...」と入力し始めた場合にのみ検索され、「Media Play...」と入力し始めた場合は検索されません。 . これを回避する方法はありますか?StartsWith() を使用するだけでなく、文字列全体を検索するようにプロパティを設定できますか?
そうでない場合、自分でこれを行うための最良の方法は何ですか? 元のコントロールを取得して、基本的に StartsWith() の呼び出しを Contains() の呼び出しに変更する方法はありますか?