我正在设计一个C#应用程序,我有一个显示操作系统和RAM相关信息的组框。 我使用控件设计了它 - 标签放在一个显示RAM相关信息的Groupbox中。
我有一个刷新按钮,点击时应显示当前使用的RAM百分比。
为此,我需要组框内的标签(以及其他一些标签)刷新并重新计算该值。
我该怎么做?我在RefreshButton_Click事件中尝试了以下所有内容,但没有任何作用:
label1.Refresh();
GroupBox1.Refresh();
Form1.Refresh();
Form1.Invalidate(true);
Panel1.Refresh();
请帮忙,因为我认为重新加载整个表格不是一个有效的解决方案。
答案 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...";
}
}