zoukankan      html  css  js  c++  java
  • winform 刷新父窗体(转)

    网络上有几种方法,先总结如下:
    调用窗体(父):Form1,被调用窗体(子):Form2
    方法1: 所有权法
    //Form1:
    //需要有一个公共的刷新方法
    public void Refresh_Method()
    {
    //...
    }
    //在调用Form2时,要把Form2的所有者设为Form1
    Form2 f2 = new Form2() ;
    f2.Owner = this;
    f2.ShowDialog() ;
    //Form2:
    //在需要对其调用者(父)刷新时
    Form1 f1 ;
    f1 = (Form1)this.Owner;
    f1.Refresh_Method() ;
    方法2:自身传递法
    //Form1:
    //需要有一个公共的刷新方法
    public void Refresh_Method()
    {
    //...
    }
    Form2 f2 = new Form2() ;
    f2.ShowDialog(this) ;
    //Form2:
    private Form1 p_f1;
    public Form2(Form1 f1)
    {
    InitializeComponent();
    p_f1 = f1;
    }
    //刷新时
    p_f1.Refresh_Method() ;
    方法3:属性法
    //Form1:
    //需要有一个公共的刷新方法
    public void Refresh_Method()
    {
    //...
    }
    //调用时
    Form2 f2 = new Form2() ;
    f2.P_F1 = this;
    f2.Show() ;

    //Form2:
    private Form1 p_f1;
    public Form1 P_F1
    {
    get{return p_f1;}
    set{p_f1 = value;}
    }
    //刷新时
    p_f1.Refresh_Method() ;
    方法4:委托法
    //Form1:
    //需要有一个公共的刷新方法
    public void Refresh_Method()
    {
    //...
    }
    //调用时
    Form2 f2 = new Form2() ;
    f2.ShowUpdate += new DisplayUpdate(Refresh_Method) ;
    f2.Show() ;
    //Form2:

    //声明一个委托
    public delegate void DisplayUpdate();
    //声明事件
    public event DisplayUpdate ShowUpdate;
    //刷新时,放在需要执行刷新的事件里
    ShowUpdate();

    //子窗体提交后
    private void btnOK_Click(object sender, EventArgs e)
    {
                 this.DialogResult = DialogResult.OK;
                 this.Close();
    }


    //判断子窗体
    if(form.ShowDialog() == DialogResult.OK)
    {
         刷新父窗体中的DataGRIDVIEW数据
    }

    -----------------------------------------------------------------------------------------------------------

    以上是在网上转载的。

    我用的方法如下:

    父窗体FrmMain 子窗体:FrmUpdateUser

    父窗体的刷新方法 :

    public void BindListLogin()
    {
    c1FlexGrid1.DataSource = wbl.GetAllList().Tables[0];
    }
    

     在调用子窗体的地方写以下代码:

      private void c1FlexGrid1_DoubleClick(object sender, EventArgs e)
            {
                C1ID = int.Parse(c1FlexGrid1[c1FlexGrid1.Row, 1].ToString().Trim());
               // MessageBox.Show(Convert.ToString(C1ID));
                FrmUpdateUser fuu = new FrmUpdateUser();
                fuu.Owner = this;
                fuu.ShowDialog();
            }
    

     在子窗体修改数据后 写以下代码:

     private void c1Button1_Click(object sender, EventArgs e)
            {
                if (txtLoginName.Text.Trim() != wbl.GetModel(fmain.LoginID).LoginName.Trim())
                {
                    //说明用户名有改动 要检查是否重复!
                    if (wbl.Exists(txtLoginName.Text.Trim()))
                    {
                        MessageBox.Show("对不起,此用户名已存在!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtLoginName.Focus();
                        return;
                    }
                    else
                    {
                        Model .Login model=new Model.Login ();
                        model .LoginName =txtLoginName .Text.Trim();
                        model .LoginPass =txtLoginPass.Text.Trim();
                        model.LoginID = fmain.LoginID;
                        wbl.Update(model);
                        MessageBox.Show("更新成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                       FrmMain fmm= (FrmMain )this.Owner ;
                       fmm.BindListLogin();
                       this.Close();
                    }
                }
            }

    测试通过没问题 ~~~

  • 相关阅读:
    Linux 防火墙配置
    【存在问题,待修改】SSH 远程登陆
    Hadoop 本地模式安装
    CentOS7 安装 JDK
    JS的DOM操作
    JavaScript
    格式与布局(定位)
    样式表
    表单、内嵌网页
    HTML中的一般标签、常用标签和表格
  • 原文地址:https://www.cnblogs.com/nianyuwen/p/2517477.html
Copyright © 2011-2022 走看看