PictureStudio开发笔记04-工具栏的动态更新及其它
来源:互联网 发布:重生漫威之我是矩阵 编辑:程序博客网 时间:2024/05/16 05:13
本人同意他人对我的文章引用,但请在引用时注明出处,谢谢.作者:蒋志强
在VS2005集成开发环境中编写WinForm类型程序,可以很方便的使用IDE来添加设置窗口中的工具栏。但这样使用IDE创建的工具栏是固定的,不能满足我们在程序运行中改变工具栏的要求。
在专业绘图软件PhotoShop或其它绘图软件中,一般都提供工具箱,用户在工具箱中选中一个工具,工具栏中会调整为相应的控件。在PictureStudio中,也需要实现这样的功能效果。这篇文章里我介绍了具体的操作方法。
在.NET FrameWork2.0的框架类库中,提供了ToolStrip类表示工具栏。ToolStrip类中有一个类型为ToolStripItemCollection名字叫做Items的属性,表示工具栏中的各种控件。可以通过Items属性为工具栏添加删除各种工具栏控件。
所以以下的代码,我实现了动态的更新工具栏
public void UpDataMainFormCurrentToolBar()
...{
System.ComponentModel.ComponentResourceManager resources =
new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
toolBoxToolBar.Items.Clear();
ToolStripItem[] itemCollection =
new ToolStripItem[ToolBox.ToolBoxInstance.CurrentTool.ToolControlItems.Length + 1];
itemCollection[0] = toolBoxPopButton;
for (int i = 0; i < ToolBox.ToolBoxInstance.CurrentTool.ToolControlItems.Length; i++)
...{
itemCollection[i + 1] = ToolBox.ToolBoxInstance.CurrentTool.ToolControlItems[i] as ToolStripItem;
}
toolBoxToolBar.Items.AddRange(itemCollection);
resources.ApplyResources(this.toolBoxToolBar, "toolBoxToolBar");
this.toolBoxToolBar.Name = "toolBoxToolBar";
this.toolBoxToolBar.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
this.Visible = true;
}
在上面的代码中,当需要更新工具栏的内容的时候,首先清空了工具栏中当前包含的控件,然后根据当前选中的工具箱中工具的类型,添加该类型工具应该对应的控件。在添加完成以后,我对了主窗口的Visible属性赋值为true。这样让窗口显示马上进行刷新,看到更新后的工具栏。
还需要留意的是,常规情况下能够放进工具栏中的控件类型只有几种,包括:ToolStripButton,ToolStripComboBox, ToolStripLable等若干个有限的控件。其它的控件无法在Items属性中直接使用Add添加进去。如果你要添加一个NumeicUpDown控件,你是无法直接在在ToolStrip中的Items属性直接进行Add。这个时候,你需要ToolStripControlHost类的帮助,通过这个类你可以将任何你所希望使用的控件添加到ToolStrip工具栏中。
具体的操作方法如下面的代码所示:
...{
public ToolStripNumericUpDown()
: base(new NumericUpDown())
...{ }
public NumericUpDown NumericUpDownControl
...{
get
...{
return Control as NumericUpDown;
}
}
}
我们需要通过ToolStripControlHost对所希望添加的控件进行包装。操作步骤是:首先从ToolStripControlHost继承,定义一个子类,在构造函数中调用基类的构造函数,也就是ToolStripControlHost类的构造函数,并使用所要包装的控件的对象作为基类构造函数的参数。然后可以定义一个属性,返回所定义的这个类的Control字段,实际上这个字段就是所包装的控件的对象。
通过以上的方式,我们把NumericUpDown控件包装为了ToolStripNumericUpDown控件,这样就可以加入到ToolStrip工具栏中了。不仅对于.Net框架类库中那些不是ToolStrip工具栏支持的控件可以使用这样的方式,对于自己定义的控件也可以进行这样的包装,让其可以添加到工具栏中。
运行效果见下面的图片。这是点击工具栏第二行第二列的工具时,工具栏的状态:
这是点击工具栏第一行第一列的工具的时,工具栏的状态,可以看到工具栏中动态添加了一个NumericUpDown控件。
学校放假了,PictureStudio还是要继续的。10号放假回重庆了,本来满高兴的回家,回来才发现真是太热了,哎。好好放假轻松一下,但功课和PictureStudio还要继续的。good luck to PictureStudio……
- PictureStudio开发笔记04-工具栏的动态更新及其它
- PictureStudio开发笔记01-序言
- PictureStudio开发笔记02-多国语言界面的实现
- PictureStudio开发笔记02-多国语言界面的实现
- PictureStudio开发笔记03-PGM格式图像详解及处理方法
- Sundy嵌入式底层开发课程笔记5 --系统及其它
- C# Code Analyser 及其它的开发背景
- 传智播客 struts1.x 动态表单及其它
- 360的误杀 及其它
- 淘宝技术交流讲座笔记及其它
- WTL 工具栏与状态的更新
- CocoaPods更新遇redefinition问题及其它问题汇总
- 优秀笔记课件——Google 及其它搜索引擎的高级使用
- VC++工具栏与状态栏的动态生成
- CMFCToolBar动态加载不同的工具栏
- 判断windows的Desktop及其它目录
- Eclipse的Platform协议及其它
- EMC的青青子衿及其它
- INNER JOIN和LEFT JION和RITHT JION怎样理解?
- 经典博客内容
- 转正啦
- visual sourcesafe 6.0实用操作
- 基于JSP技术的网络教学平台设计
- PictureStudio开发笔记04-工具栏的动态更新及其它
- 有幸观看了《变形金刚》的首映
- 使用 EJB 组件你需要了解些什么呢?
- SAX解析xml学习笔记[1]
- StringBuffer使用
- 字符串匹配(string matching)算法之二:利用有限自动机
- 二叉树--基本概念
- 格物为一,立志为首
- javascipt,js文件如何调用jsp变量