簡體   English   中英

c#winforms用戶控件之間的通信

[英]c# winforms communication between user controls

我是整個winforms編程的新手。 在一開始,似乎所有代碼都結束了我是主要的表單類。 所以我搜索了你如何在winforms應用程序中組織代碼。

我現在正在嘗試的一個解決方案是用戶控件的界面的單獨部分。

問題是我不確定控件和主窗體之間通信的最佳方式。 例如。 可以說我有一個形狀繪圖類型編輯應用程序。 有一個主窗體和一個用戶控件來繪制對象。 主窗體包含對象。 並且用戶能夠選擇要編輯的對象,並且需要突出顯示所選對象。 因此,每次選擇更改時,主窗體必須告訴顯示控件現在選擇了哪個對象。 想象一下,如果我有幾個用戶控件需要知道主窗體中的狀態信息。 每次發生變化時,我都必須調用所有控件中的函數來讓它們更新。 因此,除了必須存儲對所選對象的引用的主表單之外,所有控件也存儲它。 我必須確保它們全部更新。

我的另一個問題是,我有一個用戶控件,可以讓你設置對象的屬性,如大小或顏色。 為了讓主窗體知道屬性發生了變化,我需要為每個可更改設置創建一個自定義事件,然后在文本框或復選框發生更改並將值傳回時提升這些事件。 這似乎是很多額外的工作。 如果一切都在主表單上,那就容易多了。 但那時主要的表格類將是一百萬行。

我是否會以錯誤的方式解決這個問題?

Rewinder是正確的,你應該使用事件和INotifyPropertyChanged來處理你描述的場景中的所有通信。

另外,對於第二段中問題的部分,為什么要為每個設置煩惱? 使用具有您自己的自定義參數的單個事件,以使事件的訂閱者確切知道更改的內容。 您仍然需要處理事件處理程序中的各種情況,但它肯定會簡化操作。

您可以將控件綁定到主窗體上的事件。 然后,您可以從主窗體中提升該事件,並通知所有控件。

如果要使主窗體知道更改對象中的屬性,可以在對象上實現INotifyPropertyChanged接口。 看到這里

暫無
暫無

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

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