2015-01-07 28 views
0

我目前正在寫我的第一個非平凡的VB.net程序(所以我來自一個相對無知的立場)。該程序從數據庫(根據用戶輸入字段)獲取數據,並根據該數據繪製各種圖。VB.net:是否可以引用表單類以外的表單元素?

我已經決定了打破我的代碼爲類/文件中我覺得最直觀的方式。 UI方法在窗體類中(基本上所有的事件處理程序都響應各種控件中的用戶輸入),數據庫的東西在它自己的類和文件中,並且用於在窗體上繪製圖的方法同樣被劃分到它們自己的類中/文件。

我所面臨的問題是,DB類指的是形式類的各種元件。例如,其中一個DB方法用於填充表單類中的組合框。但它顯然無法做到這一點,因爲它無法訪問。

所以,我的問題如下:

  • 反正是有,我可以使窗體類的表單控件外部訪問?

  • 如果是這樣,它會被認爲是一個好的做法呢?

  • 或者我會更好地製作單獨的共享變量來「遮蔽」我需要訪問的字段,並保留任何方法修改限制在窗體類本身的字段內容(例如,添加項目到組合框)?

在此先感謝。

+1

a)是b)否c)或創建其他參與者調用的方法,以允許擁有的窗體對控件/顯示等進行一些操作。d)將窗體保留爲用戶輸入沙箱,並在類中定位大部分應用程序邏輯 – Plutonix

+1

如果您有權訪問[PluralSight](http://www.pluralsight.com),那麼Mark Heath有一個很好的系列文章,稱爲Windows Forms最佳實踐,它涵蓋了這些概念(關於可維護代碼模式的章節涵蓋了這些概念專題)。我剛剛完成了它,並且我學到了一噸。它在C#中,但這些概念也適用於VB。如果您目前沒有訂閱,PluralSight會免費試用。 – KevenDenen

回答

2

雖然您可以傳遞可從其他對象訪問的控件對象,但您通常不必這樣做,我個人認爲這是一種不常見的做法,除非存在令人信服的原因。這適用於您的問題中的選項1和3 。你想努力以各種可能的方式從GUI中分離數據。如果您的應用程序在具有不同技能的人員之間進行分組,並且/或者您想要擴展/重用您的應用程序組件並且/或者您想簡化維護,這尤其適用。

你需要知道的概念:

  • 層和層級(UI/DAL/BLL/DB等) - 參見: Layered Applications

  • 的DTO(數據傳輸對象) - 這將回答數據如何在層/層之間移動。點網提供,可以讓你做到這一點,例如許多數據結構,泛型列表,數據表,數據集,的ArrayList,XML等 - 參見: Pros and Cons of DTOs

  • 綁定的概念 - 如何控制與數據結構相關聯。

在簡要介紹了上述內容之後,我假設你會看到你應該在UI代碼庫中保留GUI的東西。

爲了具體回答您關於如何從數據庫綁定組合框的問題的一部分,請參考Populate Combo from DB作爲示例。

有很多參考文獻討論了上述概念。儘量讓您的架構儘可能正確,這是非常重要的。

+0

謝謝。我同意早期建立良好的編碼習慣非常重要。我相應地修改了我的代碼。還要感謝其他優秀的答案。 –

1

可以使窗體控件通過改變他們的訪問修飾符來Public訪問。可能不是最好的做法,但你可以做到這一點,如果你想。

你可能會更好過有你的火源的事件處理程序,然後調用你的DB類來獲取你需要的數據,然後調用窗體類中的其他方法來繪製你的地塊。在我看來,如果這些方法所做的唯一事情就是繪製表單,那麼就沒有理由將它們抽象出來給其他類。

2

例如,其中一種DB方法用於填充表單類中的組合框。

不這樣做。將您的數據庫方法更改爲僅返回項目列表。然後讓表單中的代碼調用DB中的方法,並用結果填充組合框。

+0

同意,我更喜歡專門做這個的數據助手類。它使事情保持整潔,好點! – Codexer

相關問題