如何从C#中的其他窗体访问或更新非父窗体或非mdi窗体的控件。填充非父窗体状态栏的最佳方式是什么
如果是的话,我有一个表格 - Form1和它的按钮。当我点击按钮,新窗体 - 窗体** 2打开这不是子窗体。我想尝试的是当我在** Form2上做一些活动时,一些信息应显示在状态栏上Form1 。
如果样品可用,它会很好。
感谢,
如何从C#中的其他窗体访问或更新非父窗体或非mdi窗体的控件。填充非父窗体状态栏的最佳方式是什么
如果是的话,我有一个表格 - Form1和它的按钮。当我点击按钮,新窗体 - 窗体** 2打开这不是子窗体。我想尝试的是当我在** Form2上做一些活动时,一些信息应显示在状态栏上Form1 。
如果样品可用,它会很好。
感谢,
您可以使用mediator pattern基本上你必须同时创建形式共享同一个中介对象。
更新示例代码
public class SimpleMediator{
public Form1 MainForm {get; set;}
public void DisplayStatus(string message){
MainForm.StatusBar.Text = message;
}
}
public class Form2 : Form{
public SimpleMediator Mediator {get; set;}
//...
}
那么当你打开窗体2现在
public void OpenSubForm(){
var mediator = new Mediator{
MainForm = this;
};
var f2 = new Form2(){
Mediator = mediator;
};
f2.Show();
}
,您可以访问内部窗体2
我建议Form2的提高是Form1中处理事件Mediator.DisplayStatus()
方法。事件参数可以包含数据,或者Form1可以从Form2的属性中获取数据。
http://jmcilhinney.blogspot.com.au/2013/10/managing-data-among-multiple-forms-part.html
编辑窗体2的构造,并添加新的Form1的参考:
public Form2(Form1 form1Para)
{
InitializeComponent();
// This is the Form1 reference
Form1 form1 = form1Para;
}
然后编辑Form1上,在那里你有方法打开新的窗体2:
// Give Form1 in the constructor (this <- the Form1)
Form2 form2 = new Form2(this);
form2.Show();
您可以在Form2中设置一个事件来通知其他人泰恩动作被触发:
public partial class Form2 : Form
{
public class StatusChangedArgs : EventArgs
{
// Put useful information here which would be retrieved from Form1
}
public event EventHandler<StatusChangedArgs> StatusChanged;
private void OnStatusChanged()
{
var handler = StatusChanged;
if (handler != null)
handler(this, new StatusChangedArgs());
}
// Call OnStatusChanged in other Form2's functions, e.g. button click ...
}
然后在Form1中创建窗体2,你可以为一个监听到Form2的注册事件Form1中:
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
var form2 = new Form2();
form2.StatusChanged += form2_StatusChanged;
}
void form2_StatusChanged(object sender, Form2.StatusChangedArgs e)
{
// Update Form1's status bar here
}
}
添加公共属性/方法来做到这一点;替代(但不好的做法)是使相应的状态栏公开 –