Посмотрите на вторую строку окна сообщения. Там вы можете увидеть, какая Java-среда фактически запущена. Мой был внезапно C: \ ProgramData \ Oracle \ Java \ javapath \ javaw.exe. Это произошло после того, как я установил «chrome java updater» (браузер Chrome застонал: «ваш java устарел, вам нужно обновить ...»).
До этого «обновления хром java» мое затмение (luna jee x64) началось без ошибок. Подойдя ближе к фону, я обнаружил следующее: chrome java updater (notabene, начатый с сайта Oracle) добавил C: \ ProgramData \ Oracle \ Java \ javapath перед env var PATH. Он содержит три символических ссылки на новейшую java 8 JRE-установку в (x86) папку программы -> следовательно, на 32-битную java JRE. Oracle заменяет Java8 старой техникой, имеющей символические ссылки в system32 (64 бит) соответственно. SysWOW64 (32 бит).
Вам нужен фактический экземпляр 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
в качестве родительского.
Если оба из них всегда подключены, вместо этого вы должны использовать параметр конструктора:
В 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();
}
отправьте WindowSettings в качестве параметра конструктора диалогового окна DialogSettingsCancel, а затем нажмите кнопку button1_Click, когда да, нажмите кнопку вызова метода закрытия обоих из них.
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();
}
}
, например, если вы хотите закрыть форму окна при выполнении действия, есть два способа сделать это
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();
}
}
Почему бы не использовать метод DialogResult для закрытия формы?
if(DialogSettingsCancel.ShowDialog() == DialogResult.Yes)
{
this.close();
}
Для этого вам нужно будет сделать это в своей форме «WindowSettings», когда вы вызываете форму DialogSettingsCancel. Точно так же вы бы назвали OpenFileDialog или любую другую форму диалога.
Закрытие вашего экземпляра окна настроек сразу после его создания. Вам нужно сначала отобразить окно настроек, а затем ждать результата диалога. Если он вернется как отмененный, закройте окно. Например:
private void button1_Click(object sender, EventArgs e)
{
Settings newSettingsWindow = new Settings();
if (newSettingsWindow.ShowDialog() == DialogResult.Cancel)
{
newSettingsWindow.Close();
}
}
new WindowSettings();
Вы только что закрыли совершенно новый экземпляр формы, которая не была видна в первую очередь.
Вам нужно закрыть экземпляр оригинала формы приняв его как параметр конструктора и сохраняя его в поле.
Вы также можете закрыть приложение:
Application.Exit();
Он завершит процессы.