【问题标题】:How to update ToolStripStatusLabel Text from a method passing all the controls on the form如何从传递表单上所有控件的方法更新 ToolStripStatusLabel 文本
【发布时间】:2015-04-24 22:26:15
【问题描述】:

我有一种方法可以重置表单上的某些控件。除了名为“tsStatusLabelInfo”的ToolStripStatusLabel 之外,我能够使该方法正常工作。此控件不会传递给resetForm() 方法。

我相信它是 StatusStrip 控件的一部分,但我还没有弄清楚如何访问 ToolStripStatusLabel 控件来更新文本。

private void resetButton_Click(object sender, EventArgs e)
{
    Utilities.resetForm(this);
}

public static void resetForm(Control form)
{
    foreach(Control c in GetOffSprings(form))
    {
        if (c.Name == "folderTextBox")
        {
            ((TextBox)c).Clear();
        }
        else if (c.Name == "mfrListTextBox")
        {
            ((RichTextBox)c).Clear();
        }
        else if (c.Name == "mfrListDataGridView")
        {
            ((DataGridView)c).DataSource = null;
        }
        else if (c.Name == "onlyRadioButton")
        {
            ((RadioButton)c).Checked = true;
        }
        else if (c.Name == "usRadioButton")
        {
            ((RadioButton)c).Checked = true;
        }
        else if (c.Name == "otherYearsCheckedListBox")
        {
            ((CheckedListBox)c).SetItemCheckState(0, CheckState.Unchecked);
            ((CheckedListBox)c).SetItemCheckState(1, CheckState.Unchecked);
        }
        else if (c.Name == "yearComboBox")
        {
            ((ComboBox)c).Text = string.Empty;
        }
        else if (c.Name == "tsStatusLabelInfo")
        {
            //Control never pass
        }
        else if (c.Name == "statusStrip1")
        {
            // Exception:Object reference not set to an instance of an object
            ((StatusStrip)c).Controls["tsStatusLabelInfo"].Text = string.Empty;
        }
    }
}

//Loop through the control recursively getting all child controls
public static IEnumerable<Control> GetOffSprings(this Control @this)
{
    foreach(Control child in @this.Controls)
    {
        yield return child;

        //MessageBox.Show(child.Name);

        foreach (var offspring in GetOffSprings(child))
        {
            yield return offspring;
        }
    }
}

【问题讨论】:

    标签: c# statusstrip toolstripstatuslabel


    【解决方案1】:

    正因为如此:https://msdn.microsoft.com/en-us/library/system.windows.forms.toolstrip.controls(v=vs.110).aspx

    Controls 集合不用于ToolStripToolStripContainer。你应该改用Itemshttps://msdn.microsoft.com/en-us/library/system.windows.forms.toolstrip.items(v=vs.110).aspx

    工具条上的项目不是Control 对象。它们是ToolStripItem 对象。在Controls 集合中递归循环不会让您访问这些项目。

    【讨论】:

    • 做到了 - 我将代码更改为 ((StatusStrip)c).Items["tsStatusLabelInfo"].Text = string.Empty;谢谢你的帮助!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多