作者:神的禁卫军 | 来源:互联网 | 2023-09-08 19:50
从窗体向主窗体传递消息从窗体向主窗体传递消息分两种:一种是主窗体主动等待从窗体过来的消息并处理,比如添加账号,添加完账号后要关闭当前窗体,主窗体检查从窗体的关闭状态进而做处理;
从窗体向主窗体传递消息
从窗体向主窗体传递消息分两种:一种是主窗体主动等待从窗体过来的消息并处理,比如添加账号,添加完账号后要关闭当前窗体,主窗体检查从窗体的关闭状态进而做处理;另种是从窗体主动向主窗体“汇报情况”,主窗体是一种被动接收状态,这种情况下会涉及到两种极为重要的编程技巧:对象注入和“回调”的使用。
主窗体主动等待
主窗体主动等待也可以使用公有属性和公有方法两种方法。
最终效果图,从窗体中点击确定后,在主窗体中显示从窗体发送过来的消息。
下面看下编程实现,代码项目: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”。
在第二个窗体中输入“我是窗口2”后点击确定,此时在主窗体中会显示“我是窗口2”。
下面看下编程实现,代码项目: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("没消息我传不了啊!");
}