0

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

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

为此,我需要 groupbox 内的标签(以及一些其他标签)来刷新和重新计算值。

我该怎么做呢?我在 RefreshButton_Click 事件中尝试了以下所有方法,但没有任何效果:

label1.Refresh(); 

GroupBox1.Refresh(); 

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

Panel1.Refresh();

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

4

4 回答 4

1

刷新不会做任何事情,只会显示相同的分配值。您必须在 RefreshButton_Click 处理程序中将新的计算值设置为您的控件:

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

希望能帮助到你!

于 2012-03-11T19:09:40.850 回答
1

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

请参阅使用 INotifyPropertyChanged 功能或 google INotifyPropertyChanged DataBinding WinForms c#

于 2012-03-11T19:20:53.457 回答
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);
}
于 2012-03-11T19:09:43.083 回答
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...";
            }
        }
于 2012-03-11T19:14:36.187 回答