我在VS2005里想用WinForm做一个c/s的程序。遇到一个问题,就是我想把我的程序设计成MDI模式的(支持多窗口)。假设我 的Window1上有个工具条,工具条上有个菜单(包含两个菜单项A1和B1)和一个叫做 读取 的按钮,两个菜单项分别可以打 开两个子窗口。两个窗口里都有一个DataGridView控件用于显示数据库里数据表的内容,由于两个窗口对应两张不同的数据表, 所以我想实现鼠标点击子窗口后,父窗口中有个变量记录这个窗口,然后点 读取 按钮时,可以根据这个变量的内容显示两 个子窗口对应的不同数据表。请教高手这个操作能够实现吗?(关键是我用鼠标点击子窗口的窗口事件如何实现)谢谢!
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
有问题再说
我的代码:
在父窗体中,我声明一个委托以及一个函数:
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”);实现时报错。
请问我对于委托的理解有什么不对的地方?
public event clickEventHandler clickEvent = null;需传递参数的时候 if (clickEvent != null)
{
clickEvent(参数);
}
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的标题
(简单点我就不更改控件的名称了)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());
}
}
}
*************************************************************************************
运行后就可以传值了