iT邦幫忙

1

[VS] C# - 使用者控制項

Nil 2022-06-17 22:27:242846 瀏覽
  • 分享至 

  • xImage
  •  

摘要

專案愈來愈大時,將會有很多不同的功能區塊需要進行功能的新增與維護,但不太可能把所有專案的功能都寫在一個地方,會使該cs檔案變得太肥導致難以維護,因此在進行設計專案或者是不同面相功能時,可以使用"使用者控制項目"分別把不同的頁面組成元件使用。


專案建置 (.Net Framework)

首先先新增一個專案,專案名稱設為MainForm,該專案將會是我們預設為主要的頁面。再到方案總管新增一個專案名稱設為PageA,此時方案總管會於下圖一樣。

https://ithelp.ithome.com.tw/upload/images/20220617/2014971406YVD6WljW.png


撰寫PageA功能

可以先將PageA的Form1.cs與Program.cs檔案刪除,並在PageA的專案底下[加入->新增項目->新增使用者控制項目]名稱設為FunctionA。
在PageA的專案新增元件,做一個簡單的加法功能,相關介面的元件部屬就不一一說明,若有需要我再開一篇較基礎的教學,介面拉完後會跟下圖類似。

https://ithelp.ithome.com.tw/upload/images/20220617/20149714NIqEsWL4FB.png

接著就開始撰寫簡單的加法程式於專案PageA底下的FunctionA.cs撰寫。

namespace PageA
{
    public partial class FunctionA : UserControl
    {
        private static int m_resultSum { get; set; }

        public FunctionA()
        {
            InitializeComponent();
        }

        private void buttonCalculation_Click(object sender, EventArgs e)
        {
            int number1 = Convert.ToInt16(textBoxNumber1.Text);
            int number2 = Convert.ToInt16(textBoxNumber2.Text);
            int sum = number1 + number2;
            m_resultSum = sum;
            textBoxSumResult.Text = sum.ToString();
        }

        // 給外部的人使用
        public static int GetSumResult()
        {
            return m_resultSum;
        }
    }
}

若此時直接執行該專案會出現錯誤CS5001 程式未包含適合進入點的靜態'Main'方法,因先前我們把相關的Form1.cs與Program.cs檔案刪除才導致我們無法進入,但也別緊張,畢竟我們一開始的想法是把這個檔案弄成元件給MainForm的專案使用,因此我們需要把PageA的輸出類型更改成"類別庫",[專案->PageA屬性->應用程式->輸出類型改為類別庫]。

https://ithelp.ithome.com.tw/upload/images/20220617/20149714nPXjzO2Sa8.png

完成修改後你是不是馬上按執行了,若你直接按執行你會出現新的錯誤。

https://ithelp.ithome.com.tw/upload/images/20220617/20149714k0mSowdXuj.png

如果你出現這個錯誤,先別怪我,因為我沒有說要執行這個專案,我們要對類別庫輸出我們要的檔案的話,你可以在方案總管對PageA點選右鍵並按下建置。

https://ithelp.ithome.com.tw/upload/images/20220617/20149714qxVgTp2xB4.png

這時候你是不是又在心裡咒我,按下去什麼反應都沒有,但你再輸出欄位看的話會看到一筆資訊,
========== 建置: 0 成功、0 失敗、1 最新、0 略過 ==========
是不是感覺來了,這時候我們在去PageA的專案路徑\PageA\bin\Debug,此時你會看到一個PageA.dll的dll檔案,這時就成功一半了。

https://ithelp.ithome.com.tw/upload/images/20220617/201497141vBOFu3oxm.png


撰寫MainForm功能

當完成前面的dll檔生成後,接著我們可以回到MainForm這個專案,繼續接下來的作業,在方案總管點選MainForm右鍵->加入->參考->右下角瀏覽->選擇PageA.dll的檔案並點選確定。

https://ithelp.ithome.com.tw/upload/images/20220617/20149714hOtomplUbW.png

回到MainForm的專案,點選Form1.cs打開設計介面的頁面,此時你在左邊工具箱最上面會看到熟悉的字眼PageA元件,並把剛剛的FunctionA的使用者控制項拉到Form1介面上,最後就會得到這個畫面。

https://ithelp.ithome.com.tw/upload/images/20220617/20149714HoQIYAO5pU.png

這時候就可以嘗試編譯MainForm,並在上面輸入數字點選計算,就可以獲得結果了,很酷吧。

https://ithelp.ithome.com.tw/upload/images/20220617/20149714BoL8nB82jc.png

如果你有看仔細看程式碼會看到有一個Function叫做GetSumResult(),這個是另外開出來要給MainForm取得總和數字結果用的,那我們要怎麼讓MainForm取得(PageA)FunctionA的結果呢,這也很簡單。

先把我們的介面給拉好。

https://ithelp.ithome.com.tw/upload/images/20220617/20149714BLnyU2hji3.png

剛剛我們有在MainForm加入參考PageA.dll的位置,接著我們就可以來到MainForm的Form1.cs進行撰寫,在最上層也就是輸入Library的地方新增下面程式。

using PageA;

當我們點選取得按鈕結果後將顯示從(PageA)Function1的總和結果,也就是GetSumResult(),呈現方法如下所敘。

private void buttonGetSumResult_Click(object sender, EventArgs e)
{
    labelDisplayResult.Text = FunctionA.GetSumResult().ToString();
}

完成上面的操作之後,我們再來進行編譯一次,先輸入上面的數字並取得結果,再點選下面的取得結果,就可以獲得我們要的結果囉。

https://ithelp.ithome.com.tw/upload/images/20220617/20149714dnF414IVss.png


結論

在不同面向的功能,可以設計出不同的使用者控制項的頁面,進而變成工具箱的元件,尤其是當專案的頁面隨之愈來愈多且功能愈來愈複雜,就可以依照這個方式進行撰寫,無論是在未來的維護或者是給他人使用都是非常方便的。

題外話

這是我第一次撰寫文章,平常也都潛水到處看文章,而現在也有一定的能力與理解,因此想說漸漸的開始撰寫教學文章並慢慢的回饋。
若有問題也歡迎在下方留言,若有誤也可以告訴我讓我了解,文筆有誤或者是用詞不對再請各位涵蓋,未來也會慢慢撰寫相關的文章,下一篇見囉。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
wilson1966
iT邦研究生 2 級 ‧ 2022-06-19 22:40:31

這就是OO 物件導向,這篇是一個很好的範例。

我要留言

立即登入留言