0

データ入力用のモーダル ダイアログ ボックスとして使用するフォームがあります。ユーザーがフォームの [OK] ボタンをクリックすると、ボタン ハンドラーでデータの検証を実行し、エラーが発生した場合は、呼び出し元に戻るのではなく、フォーム自体を再読み込み/再表示する必要があります。これは可能ですか?

発信者コード:

DatasetProperties propsWindow = new DatasetProperties();
if (propsWindows.ShowDialog() == DialogResult.Cancel)
    return;
// Do other stuffs here

フォームコード:

public partial class DatasetProperties : Form
{
    // Constructor here

    // OK button handler
    private void btnOK_Click(object sender, EventArgs e)
    {
        // Do data validations here
        if (errorsFound)
        {
            // How to reload/redisplay the form without return to caller?????
        }
     }
 }

助けてくれてありがとう、

4

3 に答える 3

2

ユーザーが検証せずにフォームを閉じないようにしてください。

FormClosing イベントを使用します。これが例です。messageBox の代わりに、検証コードを含めます。検証されない場合は、e.cancel = true です。

 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (MessageBox.Show("Are you sure you want to cancel without saving any changes?", "Confirm Cancel", MessageBoxButtons.YesNo) != DialogResult.Yes)
            e.Cancel = true;
    }
于 2013-11-08T23:39:05.953 に答える
1

メソッドForm.DialogResult内を に設定できます。この方法では、フォームは呼び出し元のフォーム ('close') に戻りません。DatasetProperties.btnOK_ClickDialogResult.NoneDatasetProperties

// OK button handler
private void btnOK_Click(object sender, EventArgs e)
{
    // Do data validations here
    if (errorsFound)
    {
        this.DialogResult = System.Windows.Forms.DialogResult.None;
        // How to reload/redisplay the form without return to caller?????
    }
 }

DatasetPropertiesこのようにして、エラーがある限り、フォームに「とどまる」ことができます。msdn から、DialogResult Enumerationが Nothing に設定されている場合None 、ダイアログ ボックスから返されます。これは、モーダル ダイアログが引き続き実行されることを意味します。

于 2013-11-09T00:02:11.720 に答える