按一个按钮,显示窗体,我一般都是这么写的
Form1 f = new Form1(user_msg[0],user_msg[2]);
f.Show();这样带着参数打开窗体是解决了
现在有如下两个问题
1.如何让新打开的窗体在关闭的时候,触发主窗体的Load()事件
2.如何设置只能打开一个这样的窗体,比如我的按钮是修改密码,我点这个按钮,只能出现一个修改密码的界面。
Form1 f = new Form1(user_msg[0],user_msg[2]);
f.Show();这样带着参数打开窗体是解决了
现在有如下两个问题
1.如何让新打开的窗体在关闭的时候,触发主窗体的Load()事件
2.如何设置只能打开一个这样的窗体,比如我的按钮是修改密码,我点这个按钮,只能出现一个修改密码的界面。
if(Application.OpenForm2["f"]!=null)
{
Form1 f = new Form1(user_msg[0],user_msg[2]);}
if(Application.OpenForm2["f"]==null)
{
f= new Form1(user_msg[0],user_msg[2]);
f.Show();
}else
{
f.BringToFront();
}
else
{
f.BringToFront();
}这里报错 f是未赋值的,要是ELSE里面加上f = new from2 不行的吧
//判断某个窗体是否已经打开
if (Application.OpenForms["Form1"] == null)
{
Form1 fm1 = new Form1();
fm1.Show();
}
//判断某个窗体是否已经打开
if (Application.OpenForms["Form1"] == null)
{
fm1= new Form1();
fm1.Show();
}
else
{
fm1.BringToFront();
}
{
Form2 f2 = new Form2();
Form f = Application.OpenForms[f2.Name];
if (f == null)
{
f = new Form2();
f.Show();
}
else
{
f.BringToFront();
}
}
你想实现什么功能?
f.Show();
把主界面也作为一个参数传过去,然后在 Form1窗口关闭事件中调用mainForm中方法
Form1 中申明一个事件public event EventHandler<EventArgs> OnClose;然后在关闭按钮的单击事件里这么写
if(OnClose != null)
{
OnClose(this,e);
}------------------------------------------看你自己调用Form1的代码
Form1 f = new Form1(user_msg[0],user_msg[2]);
f.OnClose += EventHandler<EventArgs>(frm_OnClose); //只要按2下Tab键自己出来
f.Show();---------------------------------------------
void frm_OnClose(object sender, EventArgs e)
{
Load(null,null);
//你的意思是在执行Load事件,就是要在一次用里面的代码了,那么最好用个方法去装这些代码,直接调用方法好些
}
父窗体可以定义一个公共属性,在子窗体关闭的时候对这个属性赋值
public delegate void mydelegate(string text);//定义一个委托
public static event mydelegate myevent;//定义上诉委托类型的事件
private void button1_Click(object sender, EventArgs e)
{
if (myevent != null)
{
myevent(textBox1.Text);
} }
//相当于密码窗体传值给父窗体。//这里是主窗体
private void Form1_Load(object sender, EventArgs e)
{
Form2 fm2 = new Form2();
Form2.myevent+=new Form2.mydelegate(fm2_myevent);
fm2.Show();
}
void fm2_myevent(string str)
{
this.textBox1.Text = str;
}其实就是窗体间的传值.你参考一下
f.OnClose += EventHandler <EventArgs>(frm_OnClose); //只要按2下Tab键自己出来
From里面不包含OnClose
这个在Form1中写了没,写成全局把你写的代码拿出来看下......
public partial class Form2 : Form
{ //密码窗体
public Form2()
{
InitializeComponent();
}
public delegate void mydelegate();//定义一个委托
public static event mydelegate myevent;//定义上诉委托类型的事件
private void button1_Click(object sender, EventArgs e)
{
if (myevent != null)
{
myevent();
} }
private void button2_Click(object sender, EventArgs e)
{
Form2 fm2 = new Form2();
Form2.myevent += new Form2.mydelegate(fm2_myevent);
fm2.Show();
} private void Form1_Load(object sender, EventArgs e)
{
MessageBox.Show("你好");
}
void fm2_myevent()
{
Form1_Load(null,null);
}你自己试一下,很简单的调用Form1_Load
看清楚 这个f 是Form 不是Form1 的实例,所以f.OnClose....是点不出来的改成这个应该就可以了:Form1 f = Application.OpenForms[f2.Name];
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form1 f = new Form1();
f.OnClose += EventHandler<EventArgs>(frm_OnClose); //只要按2下Tab键自己出来
f.Show();
} void frm_OnClose(object sender, EventArgs e)
{
Load22();
}
public void Load22()
{
MessageBox.Show("333");
} }From2:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} public event EventHandler<EventArgs> OnClose; private void button1_Click(object sender, EventArgs e)
{
if (OnClose != null)
{
OnClose(this, e);
} } }
f.OnClose += EventHandler<EventArgs>(frm_OnClose); //只要按2下Tab键自己出来
f.Show();
------------------自己看一下 是怎么调用的
Form1中new Form1改成Form2
f.ShowDialog();
并用委托调用事件
恩 这个的确是但是这个错误
f.OnClose += EventHandler<EventArgs>(frm_OnClose); //只要按2下Tab键自己出来
这句话有错误
System.EventHandler<System.EventArgs>是类型,但是此处当做变量来用
吐血了彻底无语了,彻底服了,那就不知道-----这个是事件最简单的应用了,是你自己什么地方出了问题吧,用的是VS2005或者以上版本吗 Form2 f = new Form2();
f.OnClose += EventHandler <EventArgs>(frm_OnClose);
f.Show();
我也不知道啊 我用的是VS2005
我是新建的一个test项目,里面就两个窗体 其他的都没有。
你前面定义的是
public event EventHandler <EventArgs> OnClose;
这里是这么用的
f.OnClose += EventHandler <EventArgs>(frm_OnClose);
f.Showdialog();