填充非父表单状态栏的最佳方法是什么

时间:2014-05-21 04:31:28

标签: c# winforms statusbar

如何从C#中的其他表单访问或更新非父或非mdi表单的控件。

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

如果样品可用,那就很好。

谢谢,

4 个答案:

答案 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