簡體   English   中英

如何在C#中的表單內刷新GroupBox / Panels內的標簽和其他控件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM