コンボボックスをプログラムで変更する
-
09-06-2019 - |
質問
を更新する必要があります combobox
新しい値を設定すると、その中に反映されたテキストが変更されます。これを行う最もクリーンな方法は、 combobox
初期化済みでメッセージあり。
だから私はクラフトしようとしています postmessage
を含む hwnd に combobox
.
したがって、現在選択されている項目を n 番目の項目に変更してメッセージを送信したい場合、どうすればよいでしょうか? postmessage
のように見える?
それに関わるのではないかと推測しています ON_CBN_SELCHANGE
, 、しかし、うまく動作させることができません。
解決
あなたが欲しいのは ComboBox_SetCurSel:
ComboBox_SetCurSel(hWndCombo, n);
または、MFC CComboBox コントロールの場合は、おそらく次のようにすることができます。
m_combo.SetCurSel(2);
手動で実行している場合は、PostMessage ではなく SendMessage も必要になると思います。CBN_SELCHANGE は、コントロールが送信する通知です。 あなたに戻って 選択が変更されたとき。
最後に、この質問に c++ タグを追加するとよいでしょう。
他のヒント
簡潔なバージョン:
const int index = 0;
m_comboBox.PostMessage(CBN_SELCHANGE, index);
問題が発生している可能性があるのは、選択変更メッセージ ハンドラー内で選択が変更されており、その結果、別の選択変更メッセージが表示されることです。
これを回避する 1 つの方法 不要なフィードバックループ 以下に示すように、選択変更メッセージ ハンドラーにセンチネルを追加します。
void onSelectChangeHandler(HWND hwnd)
{
static bool fInsideSelectChange = 0;
//-- ignore the change message if this function generated it
if (fInsideSelectChange == 0)
{
//-- turn on the sentinel
fInsideSelectChange = 1;
//-- make the selection changes as required
.....
//-- we are done so turn off the sentinel
fInsideSelectChange = 0;
}
}
タイトル (コンボボックスを閉じたときに表示される行) を変更したい場合は、次の操作を行うことができます。
m_ComboBox.DeleteString(0);//最初に削除前の場合、0 = Visual String M_ComboBox.AddString(_T( "Hello there"));
これをFXに入れます。OnCloseupCombo - ドロップダウンボックスを閉じるイベントが発生したとき
ON_CBN_CLOSEUP(IDC_COMBO1, OnCloseupCombo)
この変更は、すでに割り当てられているコンボボックス要素の選択ではなく、新しい文字列です。