如何在C#中的表单内刷新GroupBox / Panels内的标签和其他控件?

时间:2012-03-11 18:51:45

标签: c# winforms refresh groupbox

我正在设计一个C#应用程序,我有一个显示操作系统和RAM相关信息的组框。 我使用控件设计了它 - 标签放在一个显示RAM相关信息的Groupbox中。

我有一个刷新按钮,点击时应显示当前使用的RAM百分比。

为此,我需要组框内的标签(以及其他一些标签)刷新并重新计算该值。

我该怎么做?我在RefreshButton_Click事件中尝试了以下所有内容,但没有任何作用:

label1.Refresh(); 

GroupBox1.Refresh(); 

Form1.Refresh(); 
Form1.Invalidate(true); 

Panel1.Refresh();

请帮忙,因为我认为重新加载整个表格不是一个有效的解决方案。

4 个答案:

答案 0 :(得分:1)

刷新不会执行任何操作,只会显示相同的指定值。您必须将新计算值设置为RefreshButton_Click处理程序中的控件:

var myNewValue = CalculateNewValue();
label1.Text = myNewValue;

希望它有所帮助!

答案 1 :(得分:1)

创建一个包含要显示的属性的类,并为所有属性实现INotifyPropertyChanged接口。然后使用数据绑定将对象绑定到窗体上的控件。当对象的属性发生变化时,控件将自动更新。

请参阅Using the INotifyPropertyChanged functionality或Google INotifyPropertyChanged DataBinding WinForms c#

答案 2 :(得分:0)

在winforms中,您不刷新整个表单,只使用更新表单部分的触发事件。我在下面列出了这样做的方式。基本上你需要一个计算功能,你需要通过设置该函数输出的文本来更新标签。您需要根据需要添加任意数量的功能。

有趣的是,您需要创建一个计算类,因为您需要从计算中分离UI。

以下是一个例子:

private void RefreshButton_Click(object sender, EventArgs e)
{
    //Assuming label1 is for the Ram
    label1.text = getRamString();
}

private string getRamString()
{
    float ramValue = //Calculate the RAM
    return string.Format("{0}%", ramValue);
}

答案 3 :(得分:0)

最简单但不太优雅的方法是在所需的组框中循环所有控件。示例代码

        // Got group box control
        Control[] controls = Controls.Find("groupBox1", false);

        // List all elements in group box
        foreach(var c in ((Control)controls[0]).Controls)
        {
            // Update in case it is label
            if( c.GetType().ToString().EndsWith("Label") )
            {
                ((Label)c).Text = "label...";
            }
        }