2012-08-31 20 views
1

我寫了一個C#窗體窗體應用程序,它是爲1280x1024屏幕設計的。它完全充滿了控制。我需要爲1024x600屏幕創建一個「輕量級」版本,該版本可以在上網本上使用相同的代碼庫。我認爲最簡單的方法是#ifdef設計文件並定義一些在構建時選擇的變量&進行多個構建,但是我希望在解決方案中有第二個項目,它繼承了第一個窗體和使用設計師重新安排各種列表框,文本框等,也許可以製作一些標籤來保存不太相關的信息。在visual studio 2010中做這件事最簡單的方法是什麼?製作Windows窗體/應用程序的較小屏幕分辨率版本的最簡單方法?

回答

3

這就是Control.Anchor屬性的用途。您需要將其設置爲希望調整大小的控件。

從MSDN:

使用Anchor屬性來定義如何爲它的父控件大小控制會自動調整大小。將控件錨定到其父控件可確保在調整父控件大小時,錨定的邊相對於父控件的邊保持相同的位置。

您可以將控件錨定到其容器的一個或多個邊緣。例如,如果你有一個ButtonAnchor屬性值被設置爲TopBottom一個Form,所述Button被拉伸以保持頂端和Form作爲FormHeight的底部邊緣的錨定的距離增加。

+0

或者您可以製作多種表格,然後使用當前屏幕分辨率顯示相應的表單。 –

+0

好吧,你*可以*做到這一點,但這意味着你正在重複代碼,違反了DRY原則。你最終得到兩種你需要維護的表單。 – Lou

+0

@QuanticProgramming - 這是我在本網站上看到的最糟糕的編程思想。 –

1

對您而言,壞消息是確實沒有快捷簡單的解決方案。當您使用像上網本或平板電腦這樣的較小外形時,您需要注意的特定用戶體驗元素在兩種環境之間的轉換效果不佳。這就是說,如果你用你所有的邏輯創建一個基礎表單,你可以從它繼承每個屏幕的形狀因子,並分別設計兩個表單。

如果您遵循此路徑,將事件處理程序連接到設計器中的事件時,Visual Studio中存在一個錯誤 - 它不會允許您連接到位於父類中的事件處理程序。設計師會崩潰。要解決此問題,請手動連接事件處理程序,如下所示:

this.MyButton.Click += new System.EventHandler(this.MyClickEventHandler); 

祝您好運!

+0

我必須對這個100%的錯誤陳述給予回答。 ** - 「對你來說壞消息是,沒有一個簡單的解決方案。」** –

+1

Ramhound,你有什麼建議呢?到目前爲止,我最喜歡我的ifdef解決方案。我可以創建一個新窗體,使用相同的變量名稱進行設計,複製並粘貼設計代碼,並根據構建將其封鎖。我希望我所要做的就像繼承整個班級,然後使用設計師重新安排控制。 – analog123

+1

@Rhhound - 那是錯的?我不知道任何能夠自動解決此問題的產品或工具。使用對接和錨定工作的快速和簡單的解決方案 - 根據需要 - 改變表單的整體外觀 - 基本上 - 不會滿足analog123的需求。在我看來,擁有兩個獨立的佈局是最好的解決方案,但要避免代碼重複,這在WinForms中太簡單了,需要花費很多工作量。作爲一個方面說明 - 我假設在這裏構建和部署 - 在運行時檢測屏幕大小。 – GKlesczewski