none
C# 關於Form設計方式 RRS feed

  • 問題

  • 想影問大大們在設計Windoes Form得時候會怎麼去做UI設計

    譬如一個Form有很多頁面會切換的時候

    有看過一些Youtube的影片是把 Menu做在MainForm

    之後各個畫面(主畫面,設定畫面,報表,警報紀錄...) 在各別新增UserController去排版,之後再從工具箱拉到MainForm使用

    然後Menu Click決定讓哪個UserController Visible啟動

    想問問看這樣做法回不會有什麼問題

    像從設備或SQL讀取近來值與Controller之間給值寫值等等的


    還有一種是在MainForm裡頭拉Panel去做各個畫面

    或是直接透過Tabl物件做頁面切換(只是Winform的Tab拉出來UI真的很醜...)

    不知道大大可不可以分享一些經驗

    可以做去好看UI,然後程式寫法上也不會有太大問題

    2016年8月16日 上午 06:09

解答

  • 用 Visible ? 這表示所有的 usercontrol 一開始就長在 MainForm 裡面 ? 如果畫面少還好, 畫面一多, 恐怕很容易memory leak.

    有另一種方法是, 一樣做成很多的 Control, 但是先不加入 MainForm , 依照邏輯決定現在誰要加入 (Form.Controls.Add), 誰要移出 (Form.Controls.Remove)


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 open852134 2016年8月18日 上午 09:47
    2016年8月16日 上午 06:29
    版主

所有回覆

  • 用 Visible ? 這表示所有的 usercontrol 一開始就長在 MainForm 裡面 ? 如果畫面少還好, 畫面一多, 恐怕很容易memory leak.

    有另一種方法是, 一樣做成很多的 Control, 但是先不加入 MainForm , 依照邏輯決定現在誰要加入 (Form.Controls.Add), 誰要移出 (Form.Controls.Remove)


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 open852134 2016年8月18日 上午 09:47
    2016年8月16日 上午 06:29
    版主
  • 美觀的Tab Control可以參考這個範例, 或是請公司買控制項來用:

    Painting Your Own Tabs - Second Edition

    2016年8月17日 上午 03:14
  • 請問大大像這種方式如果UserControl裡面有含有很不同的控制項

    然後又會有許多變化會不會有什麼問題

    或是專案大起來為不容易Bebug之類的

    另外想問問看

    多人合作的開發都是怎樣的模式阿

    物件切割跟畫面是怎樣分配的

    2016年8月17日 上午 07:51
  • 感謝大大回復
    2016年8月17日 上午 07:52
  • 請問大大像這種方式如果UserControl裡面有含有很不同的控制項

    然後又會有許多變化會不會有什麼問題

    或是專案大起來為不容易Bebug之類的

    另外想問問看

    多人合作的開發都是怎樣的模式阿

    物件切割跟畫面是怎樣分配的

    (1) 根據我的經驗. 其實在 Windows Forms 這樣搞很容易發生 Control Handle 爆掉的問題, 通常需要在 Remove 後呼叫 GC.Collect()

    (2) 多人開發就有點難解釋了, 總之共用介面要先切出來, 大家依著介面做事, 避免相互耦合就比較少麻煩

    (3) 如果你們需要畫面的變化比較有趣, 建議改採 WPF 開發.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。



    2016年8月18日 下午 01:57
    版主
  • 感謝大大回應

    用這個個方式馬上遇到一個問題

    建立兩個 Usercontorl 裡頭各有幾個按鈕  然後同時載入到同一個Form裏頭

    當在UserControl1的按鈕按下後,需要去操作到UserControl2的變化

    變成要在UserControl1的按鈕先建立 Public Event EventHolder

    然後Form裏頭再去New出來監聽Usercontrol1 Click事件再去做動作

      

      

      

    不過這樣寫如果很多按鈕 感覺這寫法挺笨的

    光寫 Event += EventHolder 就很多行......


    • 已編輯 open852134 2016年8月23日 上午 02:17
    2016年8月23日 上午 02:16
  • 你所提的 : "當在UserControl1的按鈕按下後,需要去操作到UserControl2的變化"

    我不清楚你確實的情境.

    這有許多種解法, 依情境決定如何執行

    例如 : 如果 UserControl1 的某個 button 按下去會修改某個資料, 而這個資料的修改會影響到另一個 UserControl 的控制項. 那我的作法是,根本不會讓兩個 UserControl 有直接的耦合, 而是讓那份資料來協調兩邊的動作.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2016年8月23日 上午 02:23
    版主
  • 我的變化是指對物件的操作

    在同一個Main Form裏頭我有兩個物件 UserControl1(UC1)、UserControl2(UC2)

    在裡面各有一些UI的設計,Label、Button、Datagridview....

    當我在Main Form底下,按下UC1裡面的Button時,UC2的Label會變色或是不顯示

      

    所以寫法就變成我上面的方式

    要先在UC1建立 Public event EventHandler UC1_Button_Click

    然後到Main Form 去寫

    UC1.UC1_Button_Click+= m_UC1_Button_Click;

      

    但是這樣的寫法如果我UC1有10按鈕

    不是不是就要建立 10個  Public event EventHandler UC1_Button_Click(1~10)

    然後Main Form 又要再寫 UC1.UC1_Button_Click+= m_UC1_Button_Click(1~10);

      

     所以才有這個疑問,不知道是不是有什麼別的作法來處理這總問題

    另外大大提到的情況我的確也是這樣處理,感謝感謝!!

    2016年8月29日 上午 12:29
  • 假設你 UserControl 裡有 10 個 Button, 如果沒甚麼特別, UserControl 做一個有自訂參數的 Event , 用參數來辨別要幹嘛就好啦,

    這樣就是一個 event 啦.

     

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2016年8月29日 上午 05:34
    版主