我需要的東西大概可以被描述爲「反向錨」,「反向停靠」或類似的東西(我選擇這個只是因爲「反向錨」碰巧是我想到的第一件事作爲關鍵詞候選人在搜索可能已經提交的問題和答案時可能已經提交過討論這個主題,也許這將幫助人們以類似的方式在未來找到這個問題)。 WinForms控件實現Anchor
屬性來設置適應調整大小,以包含控制/表單大小更改,但我需要相反的 - 窗體來自適應調整大小的控件。如何使Windows窗體自適應地更改高度作爲控件添加/刪除或隱藏/顯示?
一件事情增加了一點複雜性的任務是,控件意味着被添加/刪除/顯示/隱藏/啓用/禁用(也可能調整大小 - 此功能並不是真的需要直接到目前爲止,但我懷疑它可能需要兼容非默認的Windows視覺樣式和主題,這些樣式和主題有可能會影響控件大小的不可預測性,並且可能會在應用程序運行的任何時刻發生變化)不會是表單中的最後一個 - 行的按鈕將始終處於揮發性組的最後一個控件和窗口下邊框之間。
實際的任務是設計一個窗體,它將顯示一組控件(一個標籤,一個文本框和一個0-2按鈕),它們對應每個對象的集合,並且強烈建議僅使用非常基本的「常用控件」避免了網格,列表和類似的東西(將它們包裝在像面板這樣的附加容器控件中)是完全可以接受的,但是,如果這可以真正地使它們在單獨的「用戶控件」中抽象化,解決方案更簡單,更可靠或更好,使用手寫代碼操作控件和表單大小也是完全可以接受的(我幾乎不能期望「設置一個魔法屬性並且完成了」這種任務存在的一種解決方案),但是我到目前爲止還沒有找到可靠的算法(何時改變什麼屬性和用什麼公式來計算新值))。
最大容量可以安全地限制在接近10的位置(或者20,也許但不是更多 - 在一個表單上顯示更多將是絕對不合理的(提供滾動不是選項)),所以兩種方式都可以接受:在運行時添加/刪除控件,或將它們放在設計器的表單中,只需在代碼中操縱Visible
和/或Enabled
屬性。順便說一下,我發現Visible
有問題 - 在表單呈現之前它會被框架內部關閉並重新啓動,並且其他控件Anchor
屬性會出現在遊戲中,但我認爲依靠此操作並不是一個好主意總是以同樣的方式發生,所以只需調整Size
財產就行了Visible
屬性更改並不覺得真的很方便)。
與實現此行爲有關的一些好主意是什麼?
PS:據我所知這是WPF的一個自然特性,但我使用WinForms使應用程序可以在Mac上運行,也可能在Mono的幫助下運行其他非Windows平臺。
難道類似這樣的問題http://stackoverflow.com/questions/5962595/how-do-you-resize-a -form-to-fit-its-content- – Srikanth
@Srikanth謝謝!我花了一些時間尋找相關的東西,但令我驚訝的是找不到任何東西。現在我將研究這個問題並回答它,並且可能刪除這個問題如果我在某些重要方面沒有發現這個問題。 – Ivan
有太多的方法來做到這一點。可能是AutoSize = true的FlowLayoutPanel,表單的AutoSize = true和FLP中的「rows」的usercontrols是最簡單的。用戶不喜歡沒有明確定義尺寸的主窗口,他們可能會最大化它。 –