1,创建一个父窗口,添加一个button(为了弹出子窗口),一个label(内容能够被子窗口修改)
2,创建一个子窗口一个button按钮(修改父窗口label)
3,现在想要打开副对话框之后点击button,弹出子对话框,点击子对话框上的button副对话框上的Lalbel值被修改。
请问能不能使用委托来做,请看看我做了之后为什么点击了子窗口的button之后,父窗口label值没有立即显示出来。使用调试看是被修改了:父窗口代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace Delegate_09_7_10
{
    
    
    public partial class Form1 : Form
    {
        public delegate double mutilpydelegate(double p1, double p2);
        public double m1(double p1, double p2)
        {
            return p1 * p2;
        }
        public double m2(double p1, double p2)
        {
            return p1 / p2;
        }
        public Form1()
        {
            InitializeComponent();
        }        private void button1_Click(object sender, EventArgs e)
        {
            mutilpydelegate mdele1 = new mutilpydelegate(m1);
            mutilpydelegate mdele2 = new mutilpydelegate(m2);
            label1.Text = mdele1(10,20).ToString();
        }
        public void changelable1Text()
        {
            mutilpydelegate mdele1 = new mutilpydelegate(m1);
            mutilpydelegate mdele2 = new mutilpydelegate(m2);
            label1.Text = mdele1(10, 20).ToString();
           
        }        private void button2_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.ShowDialog();
        }        private void button3_Click(object sender, EventArgs e)
        {
            changelable1Text();
        }
       
    }
}
子窗口代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace Delegate_09_7_10
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }        private void button1_Click(object sender, EventArgs e)
        {
            Form1 f1 = new Form1();
            f1.changelable1Text();
            
        }
    }
}
为什么调试模式能看到label值发生了变化却没有立即显示出?

解决方案 »

  1.   

    private void button1_Click(object sender, EventArgs e) 
            { 
                Form1 f1 = new Form1(); 
                f1.changelable1Text(); 
                
            } 你创建了一个新窗体..
    private void button1_Click(object sender, EventArgs e) 
            { 
               Form _Form =Application.OpenForms["Form1"];
               if(_Form!=null)
               {
                   Form1 _Form1 =(Form1)_Form;
                   _Form1.changelable1Text();   
                }
            } 改成这样看看.
      

  2.   

    方法2  传递参数
     private void button2_Click(object sender, EventArgs e) 
            { 
                Form2 f2 = new Form2(this); 
                f2.ShowDialog(); 
            } public partial class Form2 : Form 
        { 
            private Form1 m_Form1
            public Form2(Form1 p_Form) 
            { 
                InitializeComponent(); 
                m_Form1=p_Form;
            }         private void button1_Click(object sender, EventArgs e) 
            { 
                if(m_Form1!=null) m_Form1.changelable1Text(); 
                
            } 
        } 
      

  3.   

    把主窗口里的LABEL 赋值写到方法里去
    给你个例子
    假设这两个窗体为MainForm,EditForm: 
    MainForm: EditForm f = new EditForm(); 
    f.Owner = this; 
    f.ShowDialog(); 并提供一个公开的刷新方法: 
    public void RefreshXXX() 

    } EditForm: 
    在保持完成准备关闭前,调用: 
    MainForm f = (MainForm)Owner; 
    f.RefreshXXX(); 
    Close(); 这是比较简单的一种方式 
      

  4.   

    把主窗口里的LABEL 赋值写到方法里去
    给你个例子
    假设这两个窗体为MainForm,EditForm: 
    MainForm: EditForm f = new EditForm(); 
    f.Owner = this; 
    f.ShowDialog(); 并提供一个公开的刷新方法: 
    public void RefreshXXX() 

    } EditForm: 
    在保持完成准备关闭前,调用: 
    MainForm f = (MainForm)Owner; 
    f.RefreshXXX(); 
    Close(); 这是比较简单的一种方式 
      

  5.   

    把主窗口里的LABEL 赋值写到方法里去
    给你个例子
    假设这两个窗体为MainForm,EditForm: 
    MainForm: EditForm f = new EditForm(); 
    f.Owner = this; 
    f.ShowDialog(); 并提供一个公开的刷新方法: 
    public void RefreshXXX() 

    } EditForm: 
    在保持完成准备关闭前,调用: 
    MainForm f = (MainForm)Owner; 
    f.RefreshXXX(); 
    Close(); 这是比较简单的一种方式