急 子窗口怎么调用父窗口的方法

急, 子窗口如何调用父窗口的方法
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:也用模式对话框
可以参考上面代码,基本一样,只要把 禁用方法改成刷新就可以了,

楼主,记得给分