簡體   English   中英

C# - 如何檢查字符串值是否在不同的類中發生了變化?

[英]C# - how to check if string value has changed within a different class?

我有一堂課如下:

class TestSomeData
{
    public string someString;
    public void CheckSomeStuff()
    {
         foreach(string x in someList)
         {
              someString = x;
          }
     }
 }

我想做的是:

TestSomeData test = new TestSomeData;
test.CheckSomeStuff();
label1.Content = test.someString;

因此,如果 x 是 CheckSomeStuff 中 someList 中的 1、2、3、4、5,我需要 label1.Content 來反映這一點,但來自不同的類。 我怎么做?

一個類可以通過聲明事件來通知其他類對其所做的更改

public class SomeDataClass
{
    public event EventHandler SomeDataChanged;

    private string _someData;
    public string SomeData
    {
        get { return _someData; }
        set
        {
            if (value != _someData) {
                _someData = value;
                OnSomeDataChanged();
            }
        }
    }

    private void OnSomeDataChanged()
    {
        SomeDataChanged?.Invoke(this, EventArgs.Empty);
    }
}

class InterestedClass
{
    public void Work()
    {
        var someData = new SomeDataClass();
        someData.SomeDataChanged += someData_SomeDataChanged;
        someData.SomeData = "New Value";
    }

    void someData_SomeDataChanged(object sender, EventArgs e)
    {
        Console.WriteLine("Some data changed: {0}", ((SomeDataClass)sender).SomeData);
    }
}

您還可以將事件設為靜態。 這將允許偵聽器偵聽此類的任何實例的更改。

SomeDataClass.SomeDataChanged += SomeDataClass_SomeDataChanged;

var someData = new SomeDataClass();
someData.SomeData = "New Value";
var someOtherData = new SomeDataClass();
someData.SomeData = "Other Value";

您可以傳遞對控件的引用,以便您可以直接更改其文本。 並不是說這個設計特別漂亮,但它可以完成工作。

class TestSomeData
{
    public TestSomeData(Label myControl) {
        this.MyControl = myControl;
    }

    private Label MyControl { get; set; }

    public void CheckSomeStuff()
    {
         if (this.MyControl == null) {
             // throw ArgumentNullException or InvalidOperationException
         }

         foreach(string x in someList)
         {
              this.MyControl.Content = x;
         }
     }
 }

同樣正如其他人所指出的,控件將始終具有列表中的最后一個值。 如果您試圖讓標簽在列表枚舉時顯示每個值,您將不得不添加一些 UI 邏輯來強制控件刷新或重新繪制。

您應該將該字段設為 static 該類的所有實例都將具有共同點。 任何更改都將是全球性的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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