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

摘要

专案愈来愈大时,将会有很多不同的功能区块需要进行功能的新增与维护,但不太可能把所有专案的功能都写在一个地方,会使该cs档案变得太肥导致难以维护,因此在进行设计专案或者是不同面相功能时,可以使用"使用者控制项目"分别把不同的页面组成元件使用。


专案建置 (.Net Framework)

首先先新增一个专案,专案名称设为MainForm,该专案将会是我们预设为主要的页面。再到方案总管新增一个专案名称设为PageA,此时方案总管会于下图一样。

http://img2.58codes.com/2024/2014971406YVD6WljW.png


撰写PageA功能

可以先将PageA的Form1.cs与Program.cs档案删除,并在PageA的专案底下[加入->新增项目->新增使用者控制项目]名称设为FunctionA。
在PageA的专案新增元件,做一个简单的加法功能,相关介面的元件部属就不一一说明,若有需要我再开一篇较基础的教学,介面拉完后会跟下图类似。

http://img2.58codes.com/2024/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属性->应用程式->输出类型改为类别库]。

http://img2.58codes.com/2024/20149714nPXjzO2Sa8.png

完成修改后你是不是马上按执行了,若你直接按执行你会出现新的错误。

http://img2.58codes.com/2024/20149714k0mSowdXuj.png

如果你出现这个错误,先别怪我,因为我没有说要执行这个专案,我们要对类别库输出我们要的档案的话,你可以在方案总管对PageA点选右键并按下建置。

http://img2.58codes.com/2024/20149714qxVgTp2xB4.png

这时候你是不是又在心里咒我,按下去什么反应都没有,但你再输出栏位看的话会看到一笔资讯,
========== 建置: 0 成功、0 失败、1 最新、0 略过 ==========
是不是感觉来了,这时候我们在去PageA的专案路径\PageA\bin\Debug,此时你会看到一个PageA.dll的dll档案,这时就成功一半了。

http://img2.58codes.com/2024/201497141vBOFu3oxm.png


撰写MainForm功能

当完成前面的dll档生成后,接着我们可以回到MainForm这个专案,继续接下来的作业,在方案总管点选MainForm右键->加入->参考->右下角浏览->选择PageA.dll的档案并点选确定。

http://img2.58codes.com/2024/20149714hOtomplUbW.png

回到MainForm的专案,点选Form1.cs打开设计介面的页面,此时你在左边工具箱最上面会看到熟悉的字眼PageA元件,并把刚刚的FunctionA的使用者控制项拉到Form1介面上,最后就会得到这个画面。

http://img2.58codes.com/2024/20149714HoQIYAO5pU.png

这时候就可以尝试编译MainForm,并在上面输入数字点选计算,就可以获得结果了,很酷吧。

http://img2.58codes.com/2024/20149714BoL8nB82jc.png

如果你有看仔细看程式码会看到有一个Function叫做GetSumResult(),这个是另外开出来要给MainForm取得总和数字结果用的,那我们要怎么让MainForm取得(PageA)FunctionA的结果呢,这也很简单。

先把我们的介面给拉好。

http://img2.58codes.com/2024/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();}

完成上面的操作之后,我们再来进行编译一次,先输入上面的数字并取得结果,再点选下面的取得结果,就可以获得我们要的结果啰。

http://img2.58codes.com/2024/20149714dnF414IVss.png


结论

在不同面向的功能,可以设计出不同的使用者控制项的页面,进而变成工具箱的元件,尤其是当专案的页面随之愈来愈多且功能愈来愈複杂,就可以依照这个方式进行撰写,无论是在未来的维护或者是给他人使用都是非常方便的。

题外话

这是我第一次撰写文章,平常也都潜水到处看文章,而现在也有一定的能力与理解,因此想说渐渐的开始撰写教学文章并慢慢的回馈。
若有问题也欢迎在下方留言,若有误也可以告诉我让我了解,文笔有误或者是用词不对再请各位涵盖,未来也会慢慢撰写相关的文章,下一篇见啰。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章