それでは、Windows Formsクラス、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();
しかし、まだ同じ結果です。
新しいものではなく、開いている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();
}
このアプローチでは、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();
}
new WindowSettings();
そもそも表示されていないフォームの新しいインスタンスを閉じただけです。
元フォームのインスタンスを、コンストラクターパラメーターとして受け入れてフィールドに保存することで閉じる必要があります。
DialogResultメソッドを使用してフォームを閉じてみませんか?
if(DialogSettingsCancel.ShowDialog() == DialogResult.Yes)
{
this.close();
}
ただし、これが機能するためには、DialogSettingsCancelフォームを呼び出すときに「WindowSettings」フォーム内でそれを行う必要があります。 OpenFileDialogまたは他のDialogフォームを呼び出すのとほぼ同じ方法。
設定ウィンドウのインスタンスを作成した直後に閉じます。最初に設定ウィンドウを表示してから、ダイアログの結果を待つ必要があります。キャンセルされて戻ってきたら、ウィンドウを閉じます。例えば:
private void button1_Click(object sender, EventArgs e)
{
Settings newSettingsWindow = new Settings();
if (newSettingsWindow.ShowDialog() == DialogResult.Cancel)
{
newSettingsWindow.Close();
}
}
アプリケーションを閉じることもできます:
Application.Exit();
プロセスを終了します。
Winformを開くまたは閉じるには、さまざまな方法があります。 Form.Close()は、winformを閉じる方法の1つです。
'Form.Close()'を実行すると、そのフォームで作成されたすべてのリソースが破棄されます。リソースとは、コントロールとそのすべての子コントロール(ラベル、ボタン)、フォームなどを意味します。
Winformを閉じる他の方法
フォームを開く/開始するいくつかの方法
それらはすべて異なる動作をします、探検してください!
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();
}
}
たとえば、アクションが実行されたときに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();
}
}