(急啊急啊急啊!!!!!!)C#里面子窗口给父窗口通信问题 现在有一个为了改变主窗口中的一个控件的属性子窗口,怎么样在不关闭该打开的子窗口的条件下,让父窗口知道它的控件的属性已经被改变,并可以看到改变后的结果. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样写:在A窗口:Form B =new Form();B.ShowDialog(this.DataGrid);//把A窗口的DATAGRID传到B窗口在B窗口:1.建立一个DATAGRID对象 private DataGrid DG;2.改写B窗口的构造函数public FormB(DataGrid dg) { // // Windows 窗体设计器支持所必需的 // InitializeComponent(); DG=dg; // // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 // }3.这样就可以在B窗口对DG操作,但实际上是对A窗口的DATAGRID造作 参见http://community.csdn.net/Expert/topic/4129/4129521.xml?temp=.4960596 设置父窗口的那个字段或者属性为public,子窗口直接调用修改 回复: lr2651(戎 Waiting For Star) 我要实现的是子窗口改变了,父窗口的控件属性立即也改变,但是子窗口不关闭.你所说的好像不行,我是通过主窗口的一个函数来打开子窗口的,因为子窗口没有结束(关闭),也就是说主窗口打开子窗口的函数还没结束,怎样会触发主窗口去更新它的控件的属性呢?莫非要用到多线程,但是也难啊!!! 在父窗口中设一个public static void ()在子窗口中某事件中调用该方法,也可传参数过去 有多种方法,如用事件委托、用引用类型....下例演示怎样通过引用类型实现你的功能:子窗体中定义:protected MainForm ParentFrom = null;//主窗体新构造函数:public ChildForm(MainForm parent){ InitializeComponent(); this.ParentFrom = parent;//引用}主窗体中某Click:ChildForm frm = new ChildForm(this);frm.ShowDialog(this);子窗体测试:void ...Click(....){ this.Text = "测试引用"; if (this.ParentFrom != null) this.ParentFrom.Text += "-" + this.Text;//.......} 子窗体中定义:public delegate void sendmessage(string message);public event SendTo sendmessage;主窗体:ChildForm frm = new ChildForm();frm.SendTo += new ChildForm.sendmessage(SendArgs);frm.ShowDialog(this);private void SendArgs(string Message)//主窗体接收消息{MessageBox.Show("主窗体已收到消息:" + Message);}子窗体测试:if (this.SendTo != null) this.SendTo("主窗体收到了吗?"); 我是通过主窗口的一个函数来打开子窗口的,因为子窗口没有结束(关闭),也就是说主窗口打开子窗口的函数还没结束,怎样会触发主窗口去更新它的控件的属性呢?3tzjq(永不言弃)和 TonyBain() 提到通过子窗口的触发函数来对父窗口控件属性进行更新,想法好像很好,可是在我的程序里面就是不能运行,它说是this.ParentFrom.UpdateStatusBarText(newStr);没有定义,实际上我是在父窗口中定义了这个函数了的。不知道什么原因。 UpdateStatusBarText 的访问修饰符是否为 public ? 谢谢你们了,问题我自己已经搞定,我是将父窗口控件在子窗口的构造函数中引用SubForm(ref AxMapObjects2.AxMap baseMap)就可以了。谢谢 3tzjq(永不言弃) 和 TonyBain() ,还有 zhangci226(三只熊熊)给我启发。 SubForm(ref AxMapObjects2.AxMap baseMap)是什么?好像没见过... 程序已经交给用户使用,后来又修改了数据库结构 求一个sql语句 c#写的斗地主单机游戏怎样判断电脑出牌?求思路。。。 如何防止我的窗口被最小化 怎样用DataSet和OleDbDataAdapter修改一条记录呢?急。。。!!! 对一个m*n的数组,想将里面的每一个元素都赋为同一个值,怎样最快? 日期减去天数得到一个新的日期怎么做 能声明动态数组么? 为何不能打开WORD文档? 用c#怎吗写数据库的连接的一个类,以后用到数据库连接直接调用这个类的實例就可!! 怎么按XML模板文件写XML文件(加高分相送) 请问怎么实现VB.NET中"ListBox1.Items.Item(1)"的功能?
在A窗口:
Form B =new Form();
B.ShowDialog(this.DataGrid);//把A窗口的DATAGRID传到B窗口
在B窗口:
1.建立一个DATAGRID对象 private DataGrid DG;
2.改写B窗口的构造函数
public FormB(DataGrid dg)
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
DG=dg;
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
3.这样就可以在B窗口对DG操作,但实际上是对A窗口的DATAGRID造作
http://community.csdn.net/Expert/topic/4129/4129521.xml?temp=.4960596
你所说的好像不行,我是通过主窗口的一个函数来打开子窗口的,因为子窗口没有结束(关闭),也就是说主窗口打开子窗口的函数还没结束,怎样会触发主窗口去更新它的控件的属性呢?莫非要用到多线程,但是也难啊!!!
在子窗口中某事件中调用该方法,也可传参数过去
下例演示怎样通过引用类型实现你的功能:
子窗体中定义:
protected MainForm ParentFrom = null;//主窗体
新构造函数:
public ChildForm(MainForm parent)
{
InitializeComponent(); this.ParentFrom = parent;//引用
}主窗体中某Click:
ChildForm frm = new ChildForm(this);
frm.ShowDialog(this);子窗体测试:
void ...Click(....)
{
this.Text = "测试引用";
if (this.ParentFrom != null) this.ParentFrom.Text += "-" + this.Text;//.......
}
public delegate void sendmessage(string message);
public event SendTo sendmessage;主窗体:
ChildForm frm = new ChildForm();
frm.SendTo += new ChildForm.sendmessage(SendArgs);
frm.ShowDialog(this);private void SendArgs(string Message)//主窗体接收消息
{MessageBox.Show("主窗体已收到消息:" + Message);}子窗体测试:
if (this.SendTo != null) this.SendTo("主窗体收到了吗?");
不知道什么原因。
我是将父窗口控件在子窗口的构造函数中引用SubForm(ref AxMapObjects2.AxMap baseMap)
就可以了。谢谢 3tzjq(永不言弃) 和 TonyBain() ,还有 zhangci226(三只熊熊)给我启发。