2017-04-22 38 views
0

我需要的東西大概可以被描述爲「反向錨」,「反向停靠」或類似的東西(我選擇這個只是因爲「反向錨」碰巧是我想到的第一件事作爲關鍵詞候選人在搜索可能已經提交的問題和答案時可能已經提交過討論這個主題,也許這將幫助人們以類似的方式在未來找到這個問題)。 WinForms控件實現Anchor屬性來設置適應調整大小,以包含控制/表單大小更改,但我需要相反的 - 窗體來自適應調整大小的控件。如何使Windows窗體自適應地更改高度作爲控件添加/刪除或隱藏/顯示?

一件事情增加了一點複雜性的任務是,控件意味着被添加/刪除/顯示/隱藏/啓用/禁用(也可能調整大小 - 此功能並不是真的需要直接到目前爲止,但我懷疑它可能需要兼容非默認的Windows視覺樣式和主題,這些樣式和主題有可能會影響控件大小的不可預測性,並且可能會在應用程序運行的任何時刻發生變化)不會是表單中的最後一個 - 行的按鈕將始終處於揮發性組的最後一個控件和窗口下邊框之間。

實際的任務是設計一個窗體,它將顯示一組控件(一個標籤,一個文本框和一個0-2按鈕),它們對應每個對象的集合,並且強烈建議僅使用非常基本的「常用控件」避免了網格,列表和類似的東西(將它們包裝在像面板這樣的附加容器控件中)是完全可以接受的,但是,如果這可以真正地使它們在單獨的「用戶控件」中抽象化,解決方案更簡單,更可靠或更好,使用手寫代碼操作控件和表單大小也是完全可以接受的(我幾乎不能期望「設置一個魔法屬性並且完成了」這種任務存在的一種解決方案),但是我到目前爲止還沒有找到可靠的算法(何時改變什麼屬性和用什麼公式來計算新值))。

最大容量可以安全地限制在接近10的位置(或者20,也許但不是更多 - 在一個表單上顯示更多將是絕對不合理的(提供滾動不是選項)),所以兩種方式都可以接受:在運行時添加/刪除控件,或將它們放在設計器的表單中,只需在代碼中操縱Visible和/或Enabled屬性。順便說一下,我發現Visible有問題 - 在表單呈現之前它會被框架內部關閉並重新啓動,並且其他控件Anchor屬性會出現在遊戲中,但我認爲依靠此操作並不是一個好主意總是以同樣的方式發生,所以只需調整Size財產就行了Visible屬性更改並不覺得真的很方便)。

與實現此行爲有關的一些好主意是什麼?

PS:據我所知這是WPF的一個自然特性,但我使用WinForms使應用程序可以在Mac上運行,也可能在Mono的幫助下運行其他非Windows平臺。

+0

難道類似這樣的問題http://stackoverflow.com/questions/5962595/how-do-you-resize-a -form-to-fit-its-content- – Srikanth

+0

@Srikanth謝謝!我花了一些時間尋找相關的東西,但令我驚訝的是找不到任何東西。現在我將研究這個問題並回答它,並且可能刪除這個問題如果我在某些重要方面沒有發現這個問題。 – Ivan

+2

有太多的方法來做到這一點。可能是AutoSize = true的FlowLayoutPanel,表單的AutoSize = true和FLP中的「rows」的usercontrols是最簡單的。用戶不喜歡沒有明確定義尺寸的主窗口,他們可能會最大化它。 –

回答

0

,我會告訴你一些線索可以幫助你:

1-正確建立自己的程序操作的所有問題。

2-我建議使用嚮導方法(Next/Back按鈕),因此如果平板電腦的形狀很小,如平板電腦或智能手機,所以提到的程序將決定多少個控件組合(標籤,文本框,選項按鈕...)將位於該向導的每個幀中,並保留剩餘的「下一個」按鈕。

3-順便說一句,如果你將隱藏一些控件使用原始事件觸發運行提到的程序。 (就像啓動表單的基本按鈕,所以不依賴於可見/調整大小的事件)。

4-在上述過程的最後部分調整嚮導的每種形式的大小。

如果仍然存在問題告訴我,我希望我可以幫助:-)

+0

謝謝,但巫師的方式真的是一個矯枉過正。儘管我已經提到20個字段是一個合理的限制,並且可能顯示更多的被拒絕的想法,但比5個控制行(每個控件行的默認高度與默認的按鈕一樣高)要多一些,是極其罕見的情況。實際的計數幾乎總是像2-4這樣的東西,幾乎不會(實際上,我無法想象這種情況)接近於10.我設計的形式是一種通用/靈活的對話形式要求用戶快速設置幾個參數,然後按確定/取消 – Ivan

相關問題