簡體   English   中英

從不同的類訪問Form對象

[英]Accessing Form object from different class

我試圖通過一個單獨的類訪問Form的RichTextBox控件。

在我的表格課上......

    delegate void SetTextCall(string s);

    public void safeCall(string s)
    {
        if (this.richTextBox1.InvokeRequired)
        {
            SetTextCall d = new SetTextCall(safeCall);
            this.Invoke(d, new object[] { s });
        }
        else this.richTextBox1.AppendText("From Applicator");
    }

在另一個班級......

public void getMessages()
    {
        lock (lockObj)
        {
            Dictionary<string, List<string>> result = ScannerMessages
                .GroupBy(k => k.Value)
                .Where(grp => grp.Count() > 1)
                .ToDictionary(grp => grp.First().Key, grp => grp.Skip(1).Select(k => k.Key).ToList());

            if(result.Count > 0)
            {
                foreach(var key in result.Keys)
                {
                    // I want to write to the rich textbox the key and the list accosiated with the key 
                    // in the richtextbox on Form1
                }
             }
        }
    }

我已經嘗試將文本框修改為公開,我嘗試修改靜態方法來調用。 我不知道該如何解決這個問題。

您應該將UI與業務邏輯分開。 這意味着這個對某些數據執行計算的類應該對您的UI一無所知,也不應該對表單或其內容有任何了解。

相反,它應該只返回值,而不是讓方法無效。 然后您的UI可以調用此方法,獲取結果,然后處理顯示該結果,但感覺它是必要的。

除了更容易之外,它還大大減少了耦合。 它可以防止這個類與這個UI相關聯,它允許獨立開發UI和業務邏輯,而不需要對另一個有深入的了解。 這使得開發更容易,並且使程序更容易推理,提高可維護性,簡化調試等。

暫無
暫無

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

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