[英]How to refresh the Labels and other controls inside the GroupBox/Panels inside a Form in C#?
我正在設計一個C#應用程序,我有一個顯示操作系統和RAM相關信息的組框。 我使用控件設計了它 - 標簽放在一個顯示RAM相關信息的Groupbox中。
我有一個刷新按鈕,單擊時應顯示當前使用的RAM百分比。
為此,我需要組框內的標簽(以及其他一些標簽)來刷新並重新計算該值。
我該怎么做呢? 我在RefreshButton_Click事件中嘗試了以下所有內容,但沒有任何效果:
label1.Refresh();
GroupBox1.Refresh();
Form1.Refresh();
Form1.Invalidate(true);
Panel1.Refresh();
請幫忙,因為我認為重新加載整個表格不是一個有效的解決方案。
刷新不會執行任何操作,只顯示相同的指定值。 您必須將新計算值設置為RefreshButton_Click處理程序中的控件:
var myNewValue = CalculateNewValue();
label1.Text = myNewValue;
希望能幫助到你!
創建一個包含要顯示的屬性的類,並為所有屬性實現INotifyPropertyChanged
接口。 然后使用數據綁定將對象綁定到窗體上的控件。 當對象的屬性發生更改時,控件將自動更新。
請參閱使用INotifyPropertyChanged功能或google INotifyPropertyChanged DataBinding WinForms c# 。
在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);
}
最簡單但不太優雅的方法是將所有控件循環到所需的組框中。 示例代碼
// 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...";
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.