質問の質問に直接対応していませんが、私は幾分許容できる解決策を見つけました。
しかし、悲しいことに、何らかの理由で彼の提案者によって削除された可能性のある解決策は、メッセージフィルタを使用することでした。しかし、これはマウスクリックがどこで行われたのかを手作業で計算し、マウスイベントをコンボボックスのドロップリストで選択した項目を自分で変更するプロセスにマウスイベントを変換するwinforms機能に本質的に置き換えられました。これが私が黙っていた道です。
最終的に私は、コンセプトボックスに表示されているテキストを、その変更をキャンセルするかどうかの主題に関するユーザーの意思決定の間、置換されたアイデアで「化粧品」ソリューションに解決しました。
ので、SelectedIndexChangedイベントで、私はfollofingコードを入れている:
try
{
if (MyDataSets.Current.HasChanges() && !MyDataSets.Current.Name.Equals(cbChosenDataSet.Value))
{
cbChosenDataSet.DropDownStyle = ComboBoxStyle.DropDown;
cbChosenDataSet.Text = MyDataSets.Current.Name + ' ';
Application.DoEvents();
}
else return;
/*
* UserChoseToCancel is set according to user's choice
*/
if (UserChoseToCancel)
cbChosenDataSet.Value = MyDataSets.Current.Name;
else
MyDataSets.SetCurrent(cbChosenDataSet.Value);
/*
* other things
*/
}
catch(Exception e) {/* handling */}
finally
{
cbChosenDataSet.DropDownStyle = ComboBoxStyle.DropDownList;
}
アイデアの要旨はこれです:必要に応じて、ドロップダウンスタイルでコンボボックス」のテキストを変更することができます。ただし、リスト内のいずれかの項目に設定すると、選択が変更されます。不要にするのを避けるために、一時テキストにスペースが追加されます。
取り消しが発生しない場合、スタイルをDropDownListに復元すると、実際に選択された値(同じままである)にテキストが強制的に変更されます。
ユーザーが変更をキャンセルした場合、コンボボックスの値は古いものに戻されます。ハンドラの先頭にあるチェックは、それによって生成されたイベントをさらに処理しないようにします。
私は自分の仕事までではないことが判明した処理を試みたイベントを挙げました。私はそれらを再リストすることができる、確かに。 – Srv19
ドロップダウンで項目を選択/選択した後、保存するかどうかを尋ねるメッセージボックスが表示されるようにしますか?私はあなたが物事を望む秩序についてはまだ不明です。 – Taryn
あなたは正しいです。ここで重要なのは、メッセージボックスが表示されたときに、保存するように提案されているアイテムが表示されていたことです。 – Srv19