2014-05-21 35 views
0

如何从C#中的其他窗体访问或更新非父窗体或非mdi窗体的控件。填充非父窗体状态栏的最佳方式是什么

如果是的话,我有一个表格 - Form1和它的按钮。当我点击按钮,新窗体 - 窗体** 2打开这不是子窗体。我想尝试的是当我在** Form2上做一些活动时,一些信息应显示在状态栏上Form1

如果样品可用,它会很好。

感谢,

+0

添加公共属性/方法来做到这一点;替代(但不好的做法)是使相应的状态栏公开 –

回答

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;} 

    //... 
} 

那么当你打开窗体2现在

public void OpenSubForm(){ 
     var mediator = new Mediator{ 
      MainForm = this; 
     }; 
     var f2 = new Form2(){ 
      Mediator = mediator; 
     }; 
     f2.Show(); 
    } 

,您可以访问内部窗体2

+0

任何可用的示例类似 – manu

+0

查看更新的示例。希望这个帮助 – aifarfa

1

编辑窗体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(); 
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中创建窗体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 
    } 
} 
相关问题