Windows 表单应用程序顺序 ShowDialog()s
Windows form application sequential ShowDialog()s
好吧,我在关闭对话框表单时遇到了一个有趣的问题。
这是问题所在:
我 运行 应用程序并打开第二个表单(通过菜单条)作为 showdialog();
然后从第二个表单打开第三个表单。当我通过 button 1
打开第三种形式然后关闭它时一切正常,但是当我通过 button 2
打开第三种形式然后关闭它时,第三种形式将关闭然后它也关闭第二种形式. !!!在第二种形式中,当我显示 messageBox
并关闭它时,第二种形式也将关闭。
这是我的代码:
从第一个表格代码打开第二个表格:
private void settingsToolMenu_Click(object sender, EventArgs e)
{
settingsForm s1 = new settingsForm(this);
s1.ShowDialog();
}
通过 button 1
表单代码从第二个打开第三个表单:
private void addReportButton_Click(object sender, EventArgs e)
{
addReport a1 = new addReport(this);
a1.ShowDialog();
}
通过 button 2
表单代码从第二个打开第三个表单:
private void editReportButton_Click(object sender, EventArgs e)
{
addReport a2 = new addReport(this);
a2.ShowDialog();
}
如您所见,button 1
和 button 2
之间没有区别
here 是来自应用程序 运行ning 的视频。
不确定外面发生了什么,但应该有 .Show()
方法,它以不同的方式运行 window,包括关闭策略。试试吧。
试试这个
而不是
addReport a2 = new addReport(this);
a2.ShowDialog();
使用
addReport a2 = new addReport();
a2.ShowDialog(this);
然后单击对话框的退出/关闭按钮 window
private void BtnExit_Click(object sender, EventArgs e)
{
this.Dispose();
}
希望这能解决您的问题。
我使用了这段代码并且它起作用了。我有 3 个表单,第一个表单在 运行 应用程序打开时打开,第二个表单用一个按钮打开(可以是菜单条,没关系),然后第三个表单也是这样打开的,关闭后第三种形式第二种形式保持开放。
FormN fm = new FormN();
fm.ShowDialog();
在通过单击按钮调用的每个方法中使用该段代码,它应该可以正常工作。只需为您的表单命名更改 "FormN" 即可。此外,如果您需要将任何表单的属性传递给下一个表单,您可以这样做:
第一种形式的代码:
public string mytext; //Variable I want to use later, in Form2.
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
mytext = tb1.Text;
Form2 fm = new Form2(this);
fm.ShowDialog();
}
请注意我是如何在调用 "fm.ShowDialog();" 之前将 "tb1" 的 (TextBox1) 值保存在变量中的,这样我稍后就可以在 Form2 中使用 TextBox1 的值。
第二种形式的代码,具有主形式的变量(例如 "mytext" 值)。
Form1 mfm;
public Form2(Form1 mainfm)
{
InitializeComponent();
mfm = mainfm;
}
public void button2_Click(object sender, EventArgs e)
{
//In this method I use the variable "mytext" wich is a Form1 attribute.
//You can see how I declare it in the first form's code (see above).
textBox1.Text = mfm.mytext;
}
至此,您已经创建了主窗体 ("Form1 mfm;") 的对象,其中包含调用第二个窗体之前包含的所有变量,该对象也可用于第三个窗体。
在第二种形式 formClosing()
事件中我写了这些代码:
private void settingsForm_FormClosing(object sender, FormClosingEventArgs e)
{
if(e.CloseReason != CloseReason.UserClosing)
{
e.Cancel = true;
}
}
除用户外,没有任何东西可以关闭第二个表单!
好吧,我在关闭对话框表单时遇到了一个有趣的问题。 这是问题所在:
我 运行 应用程序并打开第二个表单(通过菜单条)作为 showdialog();
然后从第二个表单打开第三个表单。当我通过 button 1
打开第三种形式然后关闭它时一切正常,但是当我通过 button 2
打开第三种形式然后关闭它时,第三种形式将关闭然后它也关闭第二种形式. !!!在第二种形式中,当我显示 messageBox
并关闭它时,第二种形式也将关闭。
这是我的代码:
从第一个表格代码打开第二个表格:
private void settingsToolMenu_Click(object sender, EventArgs e)
{
settingsForm s1 = new settingsForm(this);
s1.ShowDialog();
}
通过 button 1
表单代码从第二个打开第三个表单:
private void addReportButton_Click(object sender, EventArgs e)
{
addReport a1 = new addReport(this);
a1.ShowDialog();
}
通过 button 2
表单代码从第二个打开第三个表单:
private void editReportButton_Click(object sender, EventArgs e)
{
addReport a2 = new addReport(this);
a2.ShowDialog();
}
如您所见,button 1
和 button 2
here 是来自应用程序 运行ning 的视频。
不确定外面发生了什么,但应该有 .Show()
方法,它以不同的方式运行 window,包括关闭策略。试试吧。
试试这个
而不是
addReport a2 = new addReport(this);
a2.ShowDialog();
使用
addReport a2 = new addReport();
a2.ShowDialog(this);
然后单击对话框的退出/关闭按钮 window
private void BtnExit_Click(object sender, EventArgs e)
{
this.Dispose();
}
希望这能解决您的问题。
我使用了这段代码并且它起作用了。我有 3 个表单,第一个表单在 运行 应用程序打开时打开,第二个表单用一个按钮打开(可以是菜单条,没关系),然后第三个表单也是这样打开的,关闭后第三种形式第二种形式保持开放。
FormN fm = new FormN();
fm.ShowDialog();
在通过单击按钮调用的每个方法中使用该段代码,它应该可以正常工作。只需为您的表单命名更改 "FormN" 即可。此外,如果您需要将任何表单的属性传递给下一个表单,您可以这样做:
第一种形式的代码:
public string mytext; //Variable I want to use later, in Form2.
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
mytext = tb1.Text;
Form2 fm = new Form2(this);
fm.ShowDialog();
}
请注意我是如何在调用 "fm.ShowDialog();" 之前将 "tb1" 的 (TextBox1) 值保存在变量中的,这样我稍后就可以在 Form2 中使用 TextBox1 的值。
第二种形式的代码,具有主形式的变量(例如 "mytext" 值)。
Form1 mfm;
public Form2(Form1 mainfm)
{
InitializeComponent();
mfm = mainfm;
}
public void button2_Click(object sender, EventArgs e)
{
//In this method I use the variable "mytext" wich is a Form1 attribute.
//You can see how I declare it in the first form's code (see above).
textBox1.Text = mfm.mytext;
}
至此,您已经创建了主窗体 ("Form1 mfm;") 的对象,其中包含调用第二个窗体之前包含的所有变量,该对象也可用于第三个窗体。
在第二种形式 formClosing()
事件中我写了这些代码:
private void settingsForm_FormClosing(object sender, FormClosingEventArgs e)
{
if(e.CloseReason != CloseReason.UserClosing)
{
e.Cancel = true;
}
}
除用户外,没有任何东西可以关闭第二个表单!