【问题标题】:Display Message in MDI Parent Status Bar from Child c#从子 c# 在 MDI 父状态栏中显示消息
【发布时间】:2014-05-05 08:51:02
【问题描述】:

这是最简单的事情,但我无法更新状态栏上的文本。我刚开始在 c# 中工作,但找不到解决方案。我试过下面的代码:

Mdiparent

public void StutasText(string text)
{
    toolStripStatusLabel.Text = text;
}

子表单

 MDIParent1 obj = new MDIParent1();
 obj.StutasText("Hello world");
 obj.Refresh();

它没有在状态栏中显示状态文本。 我哪里做错了?

【问题讨论】:

    标签: c# winforms statusbar


    【解决方案1】:

    在 MDI Parent 表单中,我假设您有 toolStripStatusLabel1。如果没有,可以通过单击 menuStrip 控件中的黑色小箭头来添加它。

    选项 1

    在您的 MDI Parent(假设 frmMain 是 MDI Parent 表单)表单中,您有 StatusStrip,转到 frmMain.Designer.cs 文件并找到该位置

    private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;
    

    做这个,

    public System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1;
    

    然后,您可以从您的子页面访问如下。

    ToolStripStatusLabel statusStrip=((frmMain)(frmMdiChild.MdiParent)).toolStripStatusLabel1
    

    选项 2

    声明一个公共属性,它将返回 toolStripStatusLabel1 控件或方法,您可以在 MDI 父窗体中设置 toolStripStatusLabel1 的文本属性。如果您返回 menuStrip1 本身,则您可以访问该控件的所有属性。如果您声明一个方法,它将设置 toolStripStatusLabel1 的文本属性,那么您只能设置文本。根据您的要求决定您想要什么。

    返回 menuStrip1 控件的实现。

     public ToolStripStatusLabel GetStatusBar
     {
      get
       {
         return this.toolStripStatusLabel1;
       }
     }
    

    然后从您的子页面中,您可以使用,

    ToolStripStatusLabel statusStrip=((frmMain)(frmMdiChild.MdiParent)).GetStatusBar;
    

    选项 3

    为了让它更漂亮一点,你可以在一个公共类中声明一个方法。然后您可以在其他子表单中重用它。

     public void ShowStatusbarMessage(Form frmMdiChild, string message, NotifierType notificationType)
       {
           ToolStripStatusLabel statusStrip=((frmMain)(frmMdiChild.MdiParent)).GetStatusBar;
           statusStrip.Text = message;
           if (notificationType == NotifierType.SuccessInfo)
           {
               statusStrip.ForeColor = System.Drawing.Color.Green;
           }
           else if (notificationType == NotifierType.Warning)
           {
               statusStrip.ForeColor = System.Drawing.Color.Orange;
           }
           else
           {
               statusStrip.ForeColor = System.Drawing.Color.Red;
    
           }
    
       }
    

    这里,NotifierType 是一个枚举

    【讨论】:

      【解决方案2】:
      ((mdiMain)MdiParent).toolStripStatusLabel.Text = "My Text";
      //but you must change the modifier property of toolStripStatusLabel to public etc
      

      【讨论】:

        【解决方案3】:

        您正在创建 MDIParent1 的新实例,而不是使用显示的实例/您的子表单所属的实例。

        你可以试试

        this.MdiParent 
        

        而不是

        new MDIParent1()
        

        【讨论】:

        • 什么样的错误?您是否将 this.MdiParent 转换为 MDIParent1?
        • 你能给那个编码吗?
        【解决方案4】:

        ((frmMDI)this.MdiParent).yourcontrol.yourproperty=yourvalue; frmMDI 是 MDI 表单的唯一名称。

        【讨论】:

          【解决方案5】:

          第一 在“mdi parent name”.Designer.cs中,将类型或成员private改为public

          第二在您的代码中添加下一个代码 (("mdi parent name")MdiParent).toolStripStatusLabel.Text = "your text";

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-12-16
            • 2014-08-18
            • 2011-06-12
            • 1970-01-01
            • 2019-03-11
            • 2013-04-24
            相关资源
            最近更新 更多