Winform自带的控件往往不能满足我们的需要,或者在某些方面不够方便,可以通过自定义控件可以解决上述的问题,但自定义控件的正确的调用方法却鲜为人知。
新建一个项目,暂且命名为UI,默认会创建一个名为Form1的窗体。
新建一个自定义控件,名为MyControl。
对MyControl代码进行修改,将其背景颜色设置为蓝色。
此时打开Form1窗体,会在工具箱里面找到自定义的MyControl控件,若找不到则需要生成一下项目。
将其拖至Form1窗体上,与上方设置的背景颜色完全一致。
但这并不是正确调用方法,若是经常接触自定义控件,当打开包含有自定义控件的窗体时,会出现类似于以下两张图的情况,出现这两种情况的原因是:生成项目时,你无法确定自定义控件生成的顺序先于窗体,若先生成窗体,再生成自定义控件,生成窗体时,窗体中所引用的自定义控件还未生成,因此造成错误。
为了确保自定义控件生成顺序先于调用自定义控件的窗体,可将自定义控件与窗体分隔为两个工程,其中自定义控件所在的工程不再是生成一个应用程序,而是生成类库供其它工程调用,因此需要将工程的输出类型设置为类库。此时Form1和PRogram都是多余的文件,可以删除。
对UI工程进行生成,会在工程目录下bin文件夹中生成一个dll文件,该文件是一个引用文件,当其它工程引用这个文件,就可以调用UI工程中的自定义控件。
此时可以关闭UI工程,并新建一个目标框架与UI工程一致的项目,暂且命名为Test。
将UI工程加入Test解决方案。
虽然两个工程再同一解决方案中,但二者之间没有任何关系,若要将其关联起来,需要在Test工程中,引用UI工程所生成的dll文件。
再对Test解决方案设置项目依赖项,设置哪个项目依赖于哪个项目才能运行;设置项目生成顺序,设置项目生成的前后顺序;设置启动项目,设置哪个项目作为启动项目。
此时打开Test工程中的Form1窗体,在工具箱中会发现UI工程中的MyControl控件,如果没有则需要生成一下项目,见到下图,意味着Winform调用自定义控件的环境已然搭配完成,此后需要自定义控件,均与UI工程中添加,Test工程中调用。
PS:建议将UI工程置于Test工程文件夹中,作为一个整体,方便搬运。
新闻热点
疑难解答