急 子窗口怎么调用父窗口的方法
急, 子窗口如何调用父窗口的方法
1.登录框是子窗口,如果cancel,则在父亲窗口禁止相关的菜单。如何实现?
2.父窗口含有数据表格datagrid,子窗口为添加、删除等功能。如何在添加、删除、更新后能自动刷新datagrid。
------解决方案--------------------
通过窗体间的传值
frmMain
piblic void a()//记得要public
{
//可以在这里写代码.
}
void btn_click(even```)
{
chirdForm frm=new chirdForm(this);
`````````````````````````````````
}
----------
formMain recFrm;
//构造函数: chirdForm
public chirdForm(formMain frm)
{
recFrm=frm;
}
void 某个方法()
{
recFrm.a();
}
---------------------------
------解决方案--------------------
1. 在登陆窗体声名一个Public变量,登陆成功的话设置它为True
显示子窗体用ShowDialog(显示模拟窗体,这样的话只有子窗体关闭时,代码才会继续往下执行)
如:
loginForm.ShowDialog(this);
if (loginForm.isSuccess)
{
[根据权限打开一些按扭的Enable]
}
2. 在子窗体的构造函数写上父窗体类型的参数,在调用子窗体时把父窗体传进去
然后设置你要控制的控件的Modifiers为Protected Internal(具体看情况要设为哪一个,可以查找MSDN)
1.登录框是子窗口,如果cancel,则在父亲窗口禁止相关的菜单。如何实现?
2.父窗口含有数据表格datagrid,子窗口为添加、删除等功能。如何在添加、删除、更新后能自动刷新datagrid。
------解决方案--------------------
通过窗体间的传值
frmMain
piblic void a()//记得要public
{
//可以在这里写代码.
}
void btn_click(even```)
{
chirdForm frm=new chirdForm(this);
`````````````````````````````````
}
----------
formMain recFrm;
//构造函数: chirdForm
public chirdForm(formMain frm)
{
recFrm=frm;
}
void 某个方法()
{
recFrm.a();
}
---------------------------
------解决方案--------------------
1. 在登陆窗体声名一个Public变量,登陆成功的话设置它为True
显示子窗体用ShowDialog(显示模拟窗体,这样的话只有子窗体关闭时,代码才会继续往下执行)
如:
loginForm.ShowDialog(this);
if (loginForm.isSuccess)
{
[根据权限打开一些按扭的Enable]
}
2. 在子窗体的构造函数写上父窗体类型的参数,在调用子窗体时把父窗体传进去
然后设置你要控制的控件的Modifiers为Protected Internal(具体看情况要设为哪一个,可以查找MSDN)
- C# code
public partial class Form2 : Form { Form1 mainForm; public Form2(Form1 form1) { InitializeComponent(); mainForm = form1; } private void button1_Click(object sender, EventArgs e) { mainForm.dataGridView1.****** } }
------解决方案--------------------
class childfrom: from
{
public delegate void login( bool );
public event login onlogin;
登陆事件
if( 用户cancel )
{
if( onlogin != null )
{
onlogin(false);
}
}
}
class parentfrom: ....
{
void showchild()
{
childfrom cf = new ...
cf.onlogin += new onlogin(cf_onlogin)
}
public void cf_onlogin(bool e)
{
if( !e )
{
控制父窗体的控件
}
}
}
------解决方案--------------------
问题1:登录框是子窗口,如果cancel,则在父亲窗口禁止相关的菜单。如何实现?
1.父窗口的WindowState 设为Max(最大,关键)
2.设置Login窗口的Cancel按键 的DialogResult 为Cancel
2.然后在父窗口的Load事件里写
FormLogin frm_login=new FormLogin();
if(frm_login.ShowDialog()==DialogResult.Cancel)
{
///禁用方法 如 Button1.Enabled=false;
}
问题2:也用模式对话框
可以参考上面代码,基本一样,只要把 禁用方法改成刷新就可以了,
楼主,记得给分