19

では、WindowsフォームクラスのWindowSettingsと、フォームには[キャンセル]ボタンがあります。ユーザーがボタンをクリックすると、ダイアログDialogSettingsCancelがポップアップ表示され、アクションを実行するかどうかをユーザーに尋ねます。ダイアログには、「はい」ボタンと「いいえ」ボタンの2つのボタンがあります。ユーザーが[はい]ボタンをクリックした場合、DialogSettingsCancelとWindowSettingsの両方を閉じたいと思います。

DialogSettingsCancelのbutton_Clickイベントハンドラー:

private void button1_Click(object sender, EventArgs e)
{
    //Code to trigger when the "Yes"-button is pressed.
    WindowSettings settings = new WindowSettings();
    this.Close();
    settings.Close();
}

アプリケーションを実行して設定フォームに移動し、[キャンセル]ボタンをクリックしてから[はい]ボタンをクリックすると、WindowSettingsを閉じずにDialogSettingsCancelのみが閉じます。

なぜうまくいかないのですか?

私も変えてみました

this.Close();
settings.Close();

settings.Close();
this.Close();

しかし、それでも同じ結果です。

4

8 に答える 8

14

WindowSettings新しいインスタンスではなく、開いている実際のインスタンスが必要です。

現在、の新しいインスタンスを作成し、WindowSettingsそれを呼び出しCloseています。その新しいインスタンスは表示されていないため、これは何もしません。

代わりに、を表示するときにDialogSettingsCancel、の現在のインスタンスをWindowSettings親として設定します。

このようなもの:

WindowSettings

private void showDialogSettings_Click(object sender, EventArgs e)
{
    var dialogSettingsCancel = new DialogSettingsCancel();
    dialogSettingsCancel.OwningWindowSettings = this;
    dialogSettingsCancel.Show();
}

DialogSettingsCancel

public WindowSettings OwningWindowSettings { get; set; }

private void button1_Click(object sender, EventArgs e)
{
    this.Close();
    if(OwningWindowSettings != null)
        OwningWindowSettings.Close();
}

このアプローチでは、aが親DialogSettingsCancelなしで開かれる可能性があることを考慮に入れています。WindowsSettings

2つが常に接続されている場合は、代わりにコンストラクターパラメーターを使用する必要があります。

WindowSettings

private void showDialogSettings_Click(object sender, EventArgs e)
{
    var dialogSettingsCancel = new DialogSettingsCancel(this);
    dialogSettingsCancel.Show();
}

DialogSettingsCancel

WindowSettings _owningWindowSettings;

public DialogSettingsCancel(WindowSettings owningWindowSettings)
{
    if(owningWindowSettings == null)
        throw new ArgumentNullException("owningWindowSettings");

    _owningWindowSettings = owningWindowSettings;
}

private void button1_Click(object sender, EventArgs e)
{
    this.Close();
    _owningWindowSettings.Close();
}
于 2013-01-17T14:54:33.800 に答える
6
new WindowSettings();

そもそも表示されていなかったフォームの新しいインスタンスを閉じたところです。

フォームの元のインスタンスをコンストラクターパラメーターとして受け入れてフィールドに格納することにより、フォームの元のインスタンスを閉じる必要があります。

于 2013-01-17T14:53:19.117 に答える
5

アプリケーションを閉じることもできます。

Application.Exit();

プロセスを終了します。

于 2015-08-25T19:02:08.230 に答える
3

DialogResultメソッドを使用してフォームを閉じてみませんか?

if(DialogSettingsCancel.ShowDialog() == DialogResult.Yes)
{
     //this will close the form but will keep application open if your 
     //application type is "console" in the properties of the project
     this.Close();
}

ただし、これを機能させるには、DialogSettingsCancelフォームを呼び出すときに、「WindowSettings」フォーム内でこれを行う必要があります。OpenFileDialogやその他のダイアログフォームを呼び出すのとほぼ同じ方法です。

于 2013-01-17T15:02:55.083 に答える
2

設定ウィンドウのインスタンスを作成した直後に閉じます。最初に設定ウィンドウを表示してから、ダイアログの結果を待つ必要があります。キャンセルされた状態で戻ってきた場合は、ウィンドウを閉じます。例えば:

private void button1_Click(object sender, EventArgs e)
{
    Settings newSettingsWindow = new Settings();

    if (newSettingsWindow.ShowDialog() == DialogResult.Cancel)
    {
        newSettingsWindow.Close();
    }
}
于 2013-01-17T14:58:34.070 に答える
0

DialogSettingsCancelのコンストラクターのパラメーターとしてWindowSettingsを送信し、button1_Clickでyesが押されたら、両方のcloseメソッドを呼び出します。

public class DialogSettingsCancel
{
    WindowSettings parent;

    public DialogSettingsCancel(WindowSettings settings)
    {
        this.parent = settings;        
    }

    private void button1_Click(object sender, EventArgs e)
    {
        //Code to trigger when the "Yes"-button is pressed.
        this.parent.Close();
        this.Close();
    }
}
于 2013-01-17T15:01:37.620 に答える
0

たとえば、アクションの実行時にWindowsフォームを閉じたい場合は、2つの方法があります。

1.直接閉じるには

Form1 f=new Form1();
f.close(); //u can use below comment also
//this.close();

2.フォームを閉じずに非表示にすることもできます

 private void button1_Click(object sender, EventArgs e)
    {
        Form1 f1 = new Form1();
        Form2 f2 = new Form2();
        int flag = 0;
        string u, p;
        u = textBox1.Text;
        p = textBox2.Text;
        if(u=="username" && p=="pasword")
        {
            flag = 1;
        }
        else
        {
          MessageBox.Show("enter correct details");
        }
        if(flag==1)
        {
            f2.Show();
            this.Hide();
        }

    }
于 2018-03-13T15:36:41.813 に答える
0

WinFormを開くまたは閉じるにはさまざまな方法があります。Form.Close()は、WinFormを閉じるための1つのメソッドです。

'Form.Close()'を実行すると、そのフォームで作成されたすべてのリソースが破棄されます。リソースとは、コントロールとそのすべての子コントロール(ラベル、ボタン)、フォームなどを意味します。

WinFormを閉じるための他のいくつかの方法

  1. Form.Hide()
  2. Application.Exit()

フォームを開く/開始するいくつかの方法

  1. Form.Show()
  2. Form.ShowDialog()
  3. Form.TopMost()

それらはすべて異なる動作をします、それらを探索してください!

于 2018-10-29T05:19:25.393 に答える