小小地使用了一下ToolStripItem的Tag属性

    在完成Microsoft Extreme Programming Adventures in CSharp的示例程序XMLNotepad时,作者Ron Jeffries为了消除不良的代码结构,定义了一个class NotepadMenuItem : MenuItem,它将菜单操作和操作时相应数据放在一起,用这个新菜单类型代替MenuItem类型。由于作者是很大程序上参考Charles Petzold的风格,所有代码都是手写的,而我在完成这个程序时使用了Visual Studio.NET 2005,在算法上和作者保持一致,但代码一开始已经大大不同,例如菜单项就是用Visual Studio的Form编辑器添加的,代码是机器生成的,因此不能在机器生成的代码中手动修改菜单的类型,如果把代码改为作者的风格又太费事。这时ToolStripItem.Tag帮了大忙。ToolStripItem是ToolStripMenuItem的父类ToolStripDropDownItem的父类,是.NET Framework 2.0中新加的。Tag属性在MSDN的说明只有:Gets or sets the object that contains data about the item. Property Value的说明是:An Object that contains data about the control. The default is null. 和前边的话没什么区别。Example居然是空,谁让它是Beta版。不过按照它的介绍是可以把一些数据加在菜单ToolStripMenuItem上的。我试着先点一下菜单项,然后在Property窗口的Tag项添加一条new语句,生成一个字符串数组的数组。执行,失败。查看相应机器生成的代码发现,Tag的值被赋为那条new语句两边再加引号,即一个字符串。既然Tag是Object类型的,而机器也能将字符串赋值给它,我需要的类型(字符串数组)也能赋值给它。不过不能让机器生成,于是在XMLNotepad的构造函数中添加….Tag=new string[][]{…,执行OK,所有测试也OK。接着我又把其它菜单的位置作了改动。就这样我用.NET Framework2.0中的方法完成作者需要的功能,避免了代码的大量改写。
Advertisements
This entry was posted in 计算机与 Internet. Bookmark the permalink.

One Response to 小小地使用了一下ToolStripItem的Tag属性

  1. Xiaoguang says:

    今天在网上看到MenuItem也是有Tag属性的,并不是新东西,不过对于我是新鲜的,而ToolStripItem是 .net Framework 2.0新增的。

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s