热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#对象间的协作和信息交换(三)从窗体向主窗体传递消息

从窗体向主窗体传递消息从窗体向主窗体传递消息分两种:一种是主窗体主动等待从窗体过来的消息并处理,比如添加账号,添加完账号后要关闭当前窗体,主窗体检查从窗体的关闭状态进而做处理;
从窗体向主窗体传递消息

  从窗体向主窗体传递消息分两种:一种是主窗体主动等待从窗体过来的消息并处理,比如添加账号,添加完账号后要关闭当前窗体,主窗体检查从窗体的关闭状态进而做处理;另种是从窗体主动向主窗体“汇报情况”,主窗体是一种被动接收状态,这种情况下会涉及到两种极为重要的编程技巧:对象注入和“回调”的使用。

主窗体主动等待

  主窗体主动等待也可以使用公有属性和公有方法两种方法。
最终效果图,从窗体中点击确定后,在主窗体中显示从窗体发送过来的消息。
《C#对象间的协作和信息交换(三)从窗体向主窗体传递消息》
《C#对象间的协作和信息交换(三)从窗体向主窗体传递消息》

  下面看下编程实现,代码项目:FromOtherToMain。
1. 定义一个从窗体变量,点击“显示从窗口”按钮时等待从窗体的返回结果,然后把消息收集回来。

private frmOther otherForm;
if (otherForm.ShowDialog() == DialogResult.OK)
{
//使用公有属性
//lblReceive.Text = otherForm.UseOtherInput;
//使用公有方法
string rec_message = null;
otherForm.UserOtherInputFuc(ref rec_message);//注意这里传引用,收于收集从窗体的消息。
lblReceive.Text = rec_message;
return;
}

2. 从窗体公有属性和公有方法的实现

public string UseOtherInput
{
get
{
return txtInput.Text;
}
}
public void UserOtherInputFuc(ref string message)
{
message = txtInput.Text;
}

从窗体主动汇报

  最终效果如下图显示。在主窗体中点击“创建从窗体”可以创建出多个从窗体,然后在第一个窗体中输入“我是窗口1”后点击确定,此时在主窗体中会显示“我是窗口1”。
  《C#对象间的协作和信息交换(三)从窗体向主窗体传递消息》

  在第二个窗体中输入“我是窗口2”后点击确定,此时在主窗体中会显示“我是窗口2”。
  《C#对象间的协作和信息交换(三)从窗体向主窗体传递消息》

  下面看下编程实现,代码项目:FromOtherToMain2。
1. 主窗体中实现这个Report函数,给从窗体调用,从窗体调用此函数并把从窗体中的消息传给主窗体。

public void Report(string message)
{
lblShowMessage.Text = message;
}

2. 主窗体中定义一个从窗体变量,点击“创建从窗体”时窗建从窗体,但注意点每次new的时候都把主窗体通过参数this传递给了从窗体,这就是对象注入。

frmOther other = null;
private void btnShowNewForm_Click(object sender, EventArgs e)
{
other = new frmOther(this);
other.Show();
}

3.从窗体的构造函数frmOther不是默认的不带参数的,而是经过修改带一个frmMain类型的参数,用于接收主窗体对象。

private frmMain mainForm = null;
public frmOther(frmMain main)
{
InitializeComponent();
txtInput.Focus();
mainForm = main;
}

4.在从窗体中输入消息并点击确认后触发的事件如下。

private void btnOK_Click(object sender, EventArgs e)
{
string message = txtInput.Text.Trim();
if (message != "")
mainForm.Report(message);//回调主函数的Report函数,把从窗体的消息传给主窗体。
else
MessageBox.Show("没消息我传不了啊!");
}

推荐阅读
author-avatar
神的禁卫军
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有