5

コード例:

private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    if(some condition)
    {
        comboBox.Text = "new string"
    }
}

私の問題は、comboBox テキストが、新しい文字列ではなく、選択したインデックスの文字列値を常に表示することです。これを回避する方法はありますか?

4

9 に答える 9

2

SelectedIndexプロパティを設定するときは、プロパティを -1 にリセットする必要がありTextます。

于 2009-06-26T15:35:56.890 に答える
2

変更コードをコンボボックス イベントの外に移動します。

if(some condition)
{
    BeginInvoke(new Action(() => comboBox.Text = "new string"));
}
于 2009-06-26T19:41:08.380 に答える
1

// 100% 働いた

private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
      BeginInvoke(new Action(() => ComboBox1.Text = "Cool!");
}
于 2013-11-01T15:47:19.593 に答える
1

何をしようとしているのかを正確に説明していただけると助かるかもしれません。あなたが説明したような目的では、SelectedIndexChanged よりも SelectionChangeCommitted イベントの方がはるかに役立つことがわかりました。特に、SelectionChangeCommitted から選択したインデックスを再度変更することができます (たとえば、ユーザーの選択が無効な場合)。また、コードからインデックスを変更すると、SelectedIndexChanged が再び起動されますが、SelectionChangeCommitted はユーザー アクションに応答してのみ起動されます。

于 2009-06-26T19:47:45.403 に答える
1

つまり、.NET は発生する可能性のある無限ループを防止しようとしています。Text プロパティが変更されると、.NET はその新しい値を現在の項目に一致させ、インデックスを変更しようとするため、SelectedIndexChanged イベントが再び発生します。

Delegates の VB 実装を探している人は、以下のコードを参照できます。

'Declares a delegate sub that takes no parameters
Delegate Sub ComboDelegate()

'Loads form and controls
Private Sub LoadForm(sender As System.Object, e As System.EventArgs) _
    Handles MyBase.Load
    ComboBox1.Items.Add("This is okay")
    ComboBox1.Items.Add("This is NOT okay")
    ResetComboBox()
End Sub

'Handles Selected Index Changed Event for combo Box
Private Sub ComboBoxSelectionChanged(sender As System.Object, e As System.EventArgs) _
    Handles ComboBox1.SelectedIndexChanged
    'if option 2 selected, reset control back to original
    If ComboBox1.SelectedIndex = 1 Then
        BeginInvoke(New ComboDelegate(AddressOf ResetComboBox))
    End If

End Sub

'Exits out of ComboBox selection and displays prompt text 
Private Sub ResetComboBox()
    With ComboBox1
        .SelectedIndex = -1
        .Text = "Select an option"
        .Focus()
    End With
End Sub

参考資料 :イベントでCombobox Text を変更するSelectedIndexChanged方法については、この投稿 (私の記事) を参照してください。ComboBox Textを変更する回避策としてデリゲートを使用する必要がある理由について、もう少し詳しく説明しています。

于 2013-02-23T20:07:56.603 に答える
0

ComboBox は、単に DropDownLists で見つけたテキストと値の組み合わせを持つのではなく、指定したオブジェクト コレクションにバインドします。

必要なことは、ComboBox の Items コレクションに移動し、更新するアイテムを見つけ、ComboBox 自体の Text フィールドにバインドされているプロパティを更新することです。その後、データバインディングは新しいアイテムで自動的に更新されます。 .

ただし、バインドされている基になるデータ オブジェクトを実際に変更する必要があるかどうかは 100% 確信が持てないため、代わりに ComboBox にバインドするための参照として HashTable またはその他のコレクションを作成することをお勧めします。

于 2009-06-26T15:36:54.593 に答える
0

あなたが使用する必要があります:

BeginInvoke(new Action((text) =>omboBox.Text = text), "設定する新しいテキスト");

于 2013-02-14T00:26:54.473 に答える