自動DialogResultを使用するときに.NETダイアログ項目を検証する方法は?

StackOverflow https://stackoverflow.com/questions/269390

  •  06-07-2019
  •  | 
  •  

質問

現時点では、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]ボタンを無効にします。

何かを確認する場合は、デザイナーの背後にあるコードが常に必要です。 あなたの場合、「閉じる」を使用できます。フォームのイベント、必要なものを確認し、必要に応じて" e.Cancel = true;"を設定します-その後、フォームは閉じられません。

このために行ったことは、OKボタンにDialogResultを設定せず、ボタンの後ろにコードを配置することです。

private void OkButton_Clicked(object sender, EventArgs e)
{
    this.DialogResult = ValueComboBox.SelectedIndex >= 0
        ? DialogResult.Ok
        : DialogResult.None;
}

ダイアログの[OK]および[キャンセル]ボタン機能を引き続き使用し、[OK]ボタンのClickedハンドラーにこのコードを配置できます。

private void OkButton_Clicked(object sender, EventArgs e)
{
    if (!IsValid()) {
        this.DialogResult = System.Windows.Forms.DialogResult.None;
    }
}

上記のコードでは、 IsValid()は実装する必要があるメソッドであり、ダイアログの入力フィールドを検証します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top