現時点では、C# でドロップダウンを使用してカスタム OK キャンセル ダイアログをセットアップしました。[OK] ボタンと [キャンセル] ボタンは DialogResult プロパティを使用するため、背後にコードはありません。私が今しなければならないことは、ダイアログの結果を返信する前に、ドロップダウンを検証して空のままになっていないことを確認することです。
これは可能ですか?
ここから
Closing フィールドをダブルクリックし、次のように実装します。
private void Second_Closing(object sender,
System.ComponentModel.CancelEventArgs e)
{
// When the user attempts to close the form, don't close it...
e.Cancel = (dropdown.selecteditemindex >= 0);
}
コンボボックスが有効な値に変更されるまで、[OK] ボタンを無効にします。
ダイアログの [OK] ボタンと [キャンセル] ボタンの機能を引き続き使用してから、このコードを [OK] ボタンの Clicked ハンドラーに配置できます。
private void OkButton_Clicked(object sender, EventArgs e)
{
if (!IsValid()) {
this.DialogResult = System.Windows.Forms.DialogResult.None;
}
}
上記のコードでIsValid()
は、ダイアログの入力フィールドを検証するメソッドを実装する必要があります。
何かを確認したい場合は、デザイナーの背後にあるコードが常に必要です。あなたの場合、フォームで「Closing」イベントを使用し、必要なものを確認し、必要に応じて「e.Cancel = true;」を設定できます。- その後、フォームは閉じられません。
これに対して私が行ったことは、[OK] ボタンに DialogResult を設定するのではなく、ボタンの背後にコードを配置することです。
private void OkButton_Clicked(object sender, EventArgs e)
{
this.DialogResult = ValueComboBox.SelectedIndex >= 0
? DialogResult.Ok
: DialogResult.None;
}