日期:2014-05-18  浏览次数:20798 次

关于窗口间的操作问题
求教一个窗口间的操作问题
Form1和Form2
通过Form2的button来控制form1的某一控件属性
应该如何实现?
Form1始终是开启的

------解决方案--------------------
标准的做法是使用委托
------解决方案--------------------
给button一个返回值 然后操作
------解决方案--------------------
1. 从Form 继承一个 Form1类.

2. 从Form 继承一个 Form2类.

3.在Form2类中加一个成员变量:frmParent

4.在Form2 类中加入一个重载的构造方法:public form2(Form1 Parent){frmParent=Parent};

5.在Form1中添加一个Button对象. 对应的事件代码为:

{

Form2 frm=new Form2(this);
frm.Show();
 

}

6.在Form2中添一个Button对象,对应事件代码为:

{

frmParent.Text="成败改写";

}


------解决方案--------------------
在Form2里面添加委托
public delegate void FormRefreshEvent(参数);//这个参数是你要对Form1里面的控件赋值或者显示数据时使用
public event FormRefreshEvent refreshFrom1;

在你想控制Form1的方法(比如方法名是Method)里面
void Method()
{
//处理数据
refreshFrom1(参数);
}


在Form1里面,调用Form2的时候这样写

Form2 fm2=new Form2();
fm2.refreshFrom1+=new Form2.FormRefreshEvent(fm2_refreshFrom1); //fm2_refreshFrom1是实现方法,这里面写你要操作的控件

实现方法里面
void fm2_refreshFrom1(参数)
{
//操作控件
}

给你个例子

C# code


    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnOK_Click(object sender, EventArgs e)
        {
            Form2 fm2 = new Form2();
            fm2.refreshFrom1 += new Form2.FormRefreshEvent(fm2_refreshFrom1);
            fm2.ShowDialog();
        }

        void fm2_refreshFrom1(DataSet ds)
        {
            this.dataGridView1.DataSource = ds.Tables[0];//此处就是你给DataGridView绑定数据的方法
        }
    }