2017-04-06 10 views
1

これは単純な解決策が必要なように聞こえるが、私はそれを解決できない。ユーザーがOKまたはCancelを使用してフォームを閉じるときに検出しますか?

private void DrawBorderForm_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    _dCornerRadius = 0.0; 
    bool bIsDouble = false; 

    try 
    { 
     bIsDouble = Double.TryParse(textBoxRadius.Text, out _dCornerRadius); 
    } 
    catch 
    { 
     bIsDouble = false; 
    } 

    if (!bIsDouble || _dCornerRadius < 0.0 || _dCornerRadius > 100.0) 
    { 
     MessageBox.Show("Please input a radius value of 0 to 100!"); 
     e.Cancel = true; 

     return; 
    } 
} 

それはテキスト値のいくつかを検証し、値がOKをされていない場合、フォームを閉じる抑制:

私はC#のフォームとFormClosingイベントハンドラを持っています。

問題は、このハンドラがと閉じるをキャンセルOK の両方のための焼成およびされていることです。キャンセルまたはクローズを確認する必要はありません。単に[OK]をクリックしているため、フォームを閉じる必要があります。

+3

を、 "データが無効である限り、「OK」ボタンをクリックすることはできません。しかし、あなたの特定の目的のために、フォーム終了イベントの代わりに、OKボタンのクリックされたイベントを処理する必要があります。 –

+1

それでは 'OK 'の中にフラグを入れてください。 – Xaqron

+0

これは、このフォームを閉じるコードを見るのに役立ちます。実際にフォームを閉じる前に、ユーザーがキャンセルボタンを押したときに、変数を設定して「キャンセル」としましょう。 FormClosingでその変数をチェックし、trueに設定されている場合はすべてのデータを破棄します。 – r41n

答えて

2

あなたがthis.DialogResultを分析することができ、これはすでにあるフォームを閉じるイベントは

+0

ありがとうございます。しかし、OKクリックハンドラを使用するコメントに基づいて調整しました。 –

+1

解決策として質問に直接的であるため、私はあなたの答えを受け入れます。しかし、私は自分の答えを将来の道として採用しました。 –

0

を解雇されたとき、私はそれに答え、この質問見つかっ設定:UXの観点から

Preventing a dialog from closing in the button's click event handler

private void btnOK_Click(object sender, EventArgs e) 
{ 
    _dCornerRadius = 0.0; 
    bool bIsDouble = false; 

    bIsDouble = Double.TryParse(textBoxRadius.Text, out _dCornerRadius); 

    if (!bIsDouble || _dCornerRadius < 0.0 || _dCornerRadius > 100.0) 
    { 
     MessageBox.Show("Please input a radius value of 0 to 100!"); 
     this.DialogResult = DialogResult.None; 
    } 
} 
関連する問題