我在VS2005里想用WinForm做一个c/s的程序。遇到一个问题,就是我想把我的程序设计成MDI模式的(支持多窗口)。假设我 的Window1上有个工具条,工具条上有个菜单(包含两个菜单项A1和B1)和一个叫做  读取  的按钮,两个菜单项分别可以打 开两个子窗口。两个窗口里都有一个DataGridView控件用于显示数据库里数据表的内容,由于两个窗口对应两张不同的数据表, 所以我想实现鼠标点击子窗口后,父窗口中有个变量记录这个窗口,然后点  读取  按钮时,可以根据这个变量的内容显示两 个子窗口对应的不同数据表。请教高手这个操作能够实现吗?(关键是我用鼠标点击子窗口的窗口事件如何实现)谢谢!

解决方案 »

  1.   

    参考
    http://topic.csdn.net/u/20091111/20/428adc4e-9b61-4202-9c3a-8b16c18fbf1d.html
    http://topic.csdn.net/u/20081014/18/41980444-ff5b-40ce-af54-27a8fa3449e7.html 
    有问题再说
      

  2.   

    我可能委托没有完全理解,实现时有些困惑:
    我的代码:
    在父窗体中,我声明一个委托以及一个函数:
    public string record;public delegate void DelValueSend(string str);
    public DelValueSend delegateValue;
    public void DelegateSendValue(string str)
            {
                this.record = str;        }
    然后在父窗体的菜单事件中,我把委托和函数关联:
    delegateValue = new DelValueSend(DelegateSendValue);而后,在子窗体中,调用这个委托,把要传递的值放进去
    frmContainer fmc = new frmContainer();
    fmc.delegateValue(“A1”);实现时报错。
    请问我对于委托的理解有什么不对的地方?
      

  3.   

    再父窗体上添加 子窗体对象.clickEvent += new 子窗体类.clickEventHandler(事件名称);在子窗体添加public delegate void clickEventHandler(参数);
    public event clickEventHandler clickEvent = null;需传递参数的时候 if (clickEvent != null)
                {
                    clickEvent(参数);
                }
      

  4.   

    窗体1 的代码 
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace 委托
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.Text = "aaaa";
            }      
            public void SetFromTile(string PFromName)
            {
                this.Text = PFromName;            
            }        private void 窗体2ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2(this);
                f2.MdiParent = this;
                f2.Show();
            }
        }
    }
    窗体2的代码
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace 委托
    {
        public partial class Form2 : Form
        {
            private delegate void DelegateSet(string PFromName);
            Form1 f = null;
            public Form2(Form1 f1)
            {
                InitializeComponent();
                f = f1;
            }        private void button1_Click(object sender, EventArgs e)
            {
                DelegateSet ds = new DelegateSet(f.SetFromTile);
                ds("我是按钮1");
            }        private void button2_Click(object sender, EventArgs e)
            {
                DelegateSet ds = new DelegateSet(f.SetFromTile);
                ds("我是按钮2");
            }
        }
    }
    窗体2 的按钮 来设置 窗体1的标题 
      

  5.   

    我只是简单用一个例子说一下委托首先新建一个工程,2个窗体  FirstFrom 和 SecondFrom
    (简单点我就不更改控件的名称了)FirstFrom 里面2个控件 一个lable和一个buttonSecondFrom 里面也是2个控件 一个textBox和一个button
    ******************************************************************************
    FirstFrom 的代码
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;namespace Submit
    {
        public partial class FirstForm : Form
        {
            public FirstForm()
            {
                InitializeComponent();
            }        private void FirstForm_Load(object sender, EventArgs e)
            {
                this.label1.Text = "";
                this.button1.Text = "点我打开第二个窗体";
            }        private void button1_Click(object sender, EventArgs e)
            {
                SecondFrom sf = new SecondFrom();
                returnValueEvent += new returnValue(FirstFrom_returnValueEvent);
                sf.Show();
            }
            void FirstFrom_returnValueEvent(string str)
            {
                this.label1.Text = str;
            }        //定义委托
            public delegate void returnValue(string str);
            //委托的事件
            public static event returnValue returnValueEvent;
            //委托的事件函数
            public void doReturnValue(string str)
            {
                returnValueEvent(str);
            }
        }
    }
    *************************************************************************************SecondFrom的代码
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;namespace Submit
    {
        public partial class SecondFrom : Form
        {
            public SecondFrom()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                FirstForm ff = new FirstForm();
                ff.doReturnValue(this.textBox1.Text.Trim());
            }
        }
    }
    *************************************************************************************
    运行后就可以传值了