如何从C#中的其他表单访问或更新非父或非mdi表单的控件。
如果是的话,我有一个表单 - Form1 和它上面的按钮。当我点击按钮时,新表格 - 表格** 2打开,这不是儿童表格。我想尝试的是当我在** Form2 上做一些活动时,一些信息应显示在状态 - 吧 Form1 。
如果样品可用,那就很好。
谢谢,
答案 0 :(得分:2)
您可以在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创建Form2时,您可以将Form1注册为Form2事件的监听器:
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
}
}
答案 1 :(得分:1)
你可以使用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;}
//...
}
然后当你打开Form2
public void OpenSubForm(){
var mediator = new Mediator{
MainForm = this;
};
var f2 = new Form2(){
Mediator = mediator;
};
f2.Show();
}
现在,您可以访问Form2中的Mediator.DisplayStatus()
方法
答案 2 :(得分:1)
编辑Form2的构造函数并添加一个新的Form1的参考:
public Form2(Form1 form1Para)
{
InitializeComponent();
// This is the Form1 reference
Form1 form1 = form1Para;
}
然后编辑Form1,您可以在其中打开新Form2的方法:
// Give Form1 in the constructor (this <- the Form1)
Form2 form2 = new Form2(this);
form2.Show();
答案 3 :(得分:0)
我建议Form2引发Form1处理的事件。事件args可以包含数据,或者Form1可以从Form2的属性中获取数据。
http://jmcilhinney.blogspot.com.au/2013/10/managing-data-among-multiple-forms-part.html