- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 单例模式;本章教学内容;一、问题描述
写一个MDI(Multiple Document Interface)窗体程序,包含两个窗体,其中一个是“工具箱”窗体,单击菜单命令时生成一个工具箱。
二、初步实现
新建项目——选择“Windows窗体应用程序”;
输入项目名称——选择存储位置——确定;
设置窗体的IsMdiContainer属性为true,或者双击窗体后写如下代码:
private void Form1_Load(object sender, EventArgs e)
{
this.IsMdiContainer = true;
}
;在窗体上建立一个菜单ToolStripMenuItem ToolBox作为启动工具箱的按钮:双击“工具箱”面板上的“菜单和工具栏”中的“MenuStrip”,生成一个菜单项,单击 选择“MenuItem”,在属性窗口修改其Text属性为“工具箱”;
“项目”菜单中“添加Windows窗体”,输入名称“FormToolbox.cs”——添加;
设置新窗体的FormBorderStyle属性为“FixedToolWindow”,“Size”属性为123(宽),290(高);
在新窗体设计窗口中,双击“工具箱”面板上“公共控件”中的“Button”,生成一个按钮,然后复制出来两个按钮,分别设置他们的Text属性为:工具一、工具二、工具三;;在“解决方案资源管理器”中双击“Form1.cs”打开Form1窗体,双击菜单栏的图标打开代码窗口。光标定位在下列事件中:
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{ }
在函数体中输入以下代码:
FormToolbox ftb = new FormToolbox();
ftb.MdiParent = this;
ftb.Show();
10. 运行程序。单击工具箱可以弹出工具箱窗体。多次单击,多次弹出。
;三、只生成一个对象
为了使工具箱只出现一次,可以在单击事件中判断这个工具箱窗体是不是出现过。因此,对ftb的定义应该放在事件之前。同时修改代码如下:
private FormToolbox ftb;
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
if (ftb == null)
{
ftb = new FormToolbox();
ftb.MdiParent = this;
ftb.Show();
}
};四、增加工具按钮,运行时单击工具按钮也可以实例化工具箱窗体。
1.右击“解决方案资源管理器”中的“Form1.cs”,选“打开”;
2.在工具箱中双击“菜单和工具栏”中的“ToolStrip”,在生成的图标处单击选”Button”;
3. 再双击该图标进入代码窗口,写如下代码:
private void toolStripButton1_Click(object sender, EventArgs e)
{
if (ftb == null)
{
ftb = new FormToolbox();
ftb.MdiParent = this;
ftb.Show();
}
}
4. 运行程序;分析存在问题:
(1)运行时,若关闭了工具箱窗体就再也弹不出来, 原因是关闭了的窗口资源已释放,但并不为null,其IsDisposed属性为true。
(2)代码重复,若要五个地方都需要实例化“工具箱”窗体得重复五次相同的代码,且若有小bug,需要改变五个地方。
五、封装实例化工具箱的代码为一个方法
private void openToolbox()
{
if (ftb == null || ftb.IsDisposed) ftb = new FormToolbox();
ftb.MdiParent = this;
文档评论(0)