通过单击一个按钮显示frm2,代码如下: frm2 frm2 = new frm2();
frm2.Show();如果不停的单击按钮,也就是不停的执行以上代码,就会生成很多个frm2窗体。1、为什么会出现这么多frm2窗口?
2、请问这些完全相同的frm2之间有什么区别么?如何控制每个独立的frm2窗体?
3、在实际使用中,我们即使多次单机按钮,也应该出现一个frm2窗体就足够了,如何避免多次单击出现多个frm2的现象?谢谢
frm2.Show();如果不停的单击按钮,也就是不停的执行以上代码,就会生成很多个frm2窗体。1、为什么会出现这么多frm2窗口?
2、请问这些完全相同的frm2之间有什么区别么?如何控制每个独立的frm2窗体?
3、在实际使用中,我们即使多次单机按钮,也应该出现一个frm2窗体就足够了,如何避免多次单击出现多个frm2的现象?谢谢
{
frm2 frm2; void button1_Click(object sender, System.EventArgs e)
{
if (frm2 != null) frm2 = new frm2();
frm2.Show();
}
}
if (frm2 == null) frm2 = new frm2();
void button1_Click(object sender, System.EventArgs e)
{
(sender as Button).Enabled = false;
frm2 frm2 = new frm2();
frm2.Show();
}
Form2 f2=new Form2();
这样就创建了一个窗体。其中Form2是窗体类,里面封装了如何构建f2的方法
相当于f2是Form2类的实例。
就像string是一个类,可以用string定义无穷多个实例差不多意思(但是Form2是窗体类)。问题2:
windows会为每个窗体分配一个各不相同的句柄。在C#中是InPtr类型,在C++中是一个长指针。
你可以在每个FORM2的实例中调用 MessageBox.Show(this.Handle.ToString());方法查看,每个窗体的句柄都是不同的。
你可以把每个子窗体的句柄存到某个数组里进行管理。问题3:
要避免出现多个重复的窗体可以用两个方法
1.用showdialog()方法显示子窗体
2.在主窗体中用一个static bool变量,在子窗体的load中将变量赋为true。closed是赋为false。主窗体生成子窗体前对此变量检查。这是我学C#至今的理解。如有错误,请后面补充
就是修改了frm2窗口中的控件内容,然后关闭frm2
此时再次单机按钮如何显示已经修改了控件内容的那个frm2?
我只知道实现的方法:你在关闭Frm2的时候保存下来内容就行了,不保存就不行,
因为你没叫机器保存下来,不象人可以自己记录。
{
InitializeComponent();
}
比如说你改了一个label1.text public Form_About(string label_Changed)
{
InitializeComponent();
label1.text=label_Changed
}
你在构造函数中传入一个值,比如 string label_Changed
至于你要保存,那么比如你在Form_Main中定义一个Static变量
然后你在Form2的Closed事件里面对Form_Main的变量赋值,你要显示更新后的Form2只要把这个变量传给Form2的构造函数即可