All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
VS2005开发中Timer控件失效的解决方法_[Asp.Net教程]
SQL循序渐进(7)更新记录_[SQL,Server教程]
GridView+FormView,示范数据:,新增、修改、删除
.NET开发不可不知、不可不用的辅助类(一)_[Asp.Net教程]
无日志恢复Sql,server_[SQL,Server教程]
Javscript实现表单复选框的全选功能_JavaScript技术_编程技术
突破Windows,2003,PHP服务器的新思路_php资料_编程技术
asp.net2.0验证控件之RegularExpressionValidator控件使用
AJAX的jQuery实现入门(一)_[AJAX教程]
用AjaxPro实现二级联动_[AJAX教程]
Reading number is top 10 pictures
陪睡门马睿菈自曝写真 称首拍大尺度照片2
Born After 90 Beijing sports university campus flower photos3
The most popular girls welcome eggplant
Average female college students3
男人巳快沦落成动物了
A man's favorite things1
Fat bird to fly
人美胸美腿更美2
Born After 90 Beijing sports university campus flower photos5
Sora aoi after swimming
Download software ranking
Unix video tutorial10
Boxer vs Yellow3
I'm come from Beijing1
matrix3
网络管理员第三版
Wild things 2
Dance with duck(male prostitution)
WebService在.NET中的实战应用教学视频 → 第3集
Unix video tutorial19
Visual C++界面编程技术
delv published in(发表于) 2014/1/27 6:51:29 Edit(编辑)
手把手教你制作vs2005装饰_[Asp.Net教程]

手把手教你制作vs2005装饰_[Asp.Net教程]

手把手教你制作vs2005装饰_[Asp.Net教程]

如果把.net开发人员比作是行走江湖的侠客,那vs就好比是侠客手中的剑,比武的时候讲究的的一寸长,一寸强,那我们应该如何改善我们的武器呢?铁匠铺的铁匠老软早就为我们做好了准备,他在我们的武器上装了很多环,打了很多洞,我们完全可以在这些环或洞上镶嵌珠宝,让这把剑更加靓丽,也可以在这把剑上装上暗器,增加武器杀伤力,如果您自身还练就了九阳神功,配上这把倚天剑,包你很快就知道无敌真寂寞的滋味。哈哈。不胡诌了,言归正传,本文通过详细的操作步骤讲述一个装饰vs2005的故事。
让我们打开vs2005,选择创建项目,在接下来的向导中选择项目模板:其他项目类型-扩展性-visual studio外接程序,然后给我们的大钻石起个漂亮的名字:RecentProjectCleaner。忘记说了,这个外接程序要完成的任务是在菜单的工具栏创建一个子菜单,点击这个子菜单可以呼出我们的暗器,这个暗器用来清除vs2005起始页中的最近项目列表、 第一个步骤的图示如下:

然后,一路next,直到出现选择外接程序选项对话框的时候,选择如下:

点击下一步,完成向导后,项目模板会自动生成的文件列表如下:
CommandBar.resx ----------- 这个是命令栏的资源文件
Connect.cs ----------- 是一个继承了IDTExtensibility2, IDTCommandTarget的类,是addins的实现类
RecentProjectCleaner.AddIn -------------------这个是addins进行xcopy部署的配置文件,部署的时候拷贝到C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Addins
RecentProjectCleaner - For Testing.AddIn -------------这个是调试运行的的测试类,在调试的时候,这个文件会自动拷贝到C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Addins位置
首先介绍最主要的文件Connect.cs ,这个类包含如下的实现方法
OnConnection - 处理外接程序加载的时候触发
OnDisconnection - 在处理外接程序卸载的时候触发
OnAddInsUpdate - 外接程序出现更新的时候触发
OnStartupComplete - 外接程序加载结束时候触发
OnBeginShutdown - 开始卸载的时候触发
QueryStatus - 查询状态
Exec - 执行命令
本例中,我们实现的目的是:在工具菜单上创建一个新的子菜单,点击这个菜单,能够清除启动页最近项目列表,所以我们需要做的是
1) 在外接程序加载的时候,创建菜单
2) 点击菜单,执行删除最近列表项的命令
3) 卸载的时候,删除新增菜单项
所以添加工具子菜单的代码要添加到OnConnection 中如下:


1 /**////

实现 IDTExtensibility2 接口的 OnConnection 方法。接收正在加载外接程序的通知。
2 /// 宿主应用程序的根对象。
3 /// 描述外接程序的加载方式。
4 /// 表示此外接程序的对象。
5 ///
6 public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
7 {
8 _applicationObject = (DTE2)application;
9 _addInInstance = (AddIn)addInInst;
10 if (connectMode == ext_ConnectMode.ext_cm_UISetup)
11 {
12 object[] contextGUIDS = new object[] { };
13 Commands2 commands = (Commands2)_applicationObject.Commands;
14 string toolsMenuName = "工具";
15
16 //将此命令置于“工具”菜单上。
17 //查找 MenuBar 命令栏,该命令栏是容纳所有主菜单项的顶级命令栏:
18 Microsoft.VisualStudio.CommandBars.CommandBar menuBarCommandBar = ((Microsoft.VisualStudio.CommandBars.CommandBars)_applicationObject.CommandBars)["MenuBar"];
19
20 //在 MenuBar 命令栏上查找“工具”命令栏:
21 CommandBarControl toolsControl = menuBarCommandBar.Controls[toolsMenuName];
22
23
24 CommandBarPopup toolsPopup = (CommandBarPopup)toolsControl;
25
26 //如果希望添加多个由您的外接程序处理的命令,可以重复此 try/catch 块,
27 // 只需确保更新 QueryStatus/Exec 方法,使其包含新的命令名。
28 try
29 {
30 //将一个命令添加到 Commands 集合:
31 Command command = commands.AddNamedCommand2(_addInInstance, "RecentProjectCleaner", "RecentProjectCleaner", "Executes the command for RecentProjectCleaner", true, 59, ref contextGUIDS, (int)vsCommandStatus.vsCommandStatusSupported + (int)vsCommandStatus.vsCommandStatusEnabled, (int)vsCommandStyle.vsCommandStylePictAndText, vsCommandControlType.vsCommandControlTypeButton);
32
33 //将对应于该命令的控件添加到“工具”菜单:
34 if ((command != null) && (toolsPopup != null))
35 {
36 command.AddControl(toolsPopup.CommandBar, 10);
37 }
38 }
39 catch (System.ArgumentException)
40 {
41 //如果出现此异常,原因很可能是由于具有该名称的命令
42 // 已存在。如果确实如此,则无需重新创建此命令,并且
43 // 可以放心忽略此异常。
44 }
45 }
46 }


执行命令的操作添加到Exec中,


Exec
/**////

实现 IDTCommandTarget 接口的 Exec 方法。此方法在调用该命令时调用。
/// 要执行的命令的名称。
/// 描述该命令应如何运行。
/// 从调用方传递到命令处理程序的参数。
/// 从命令处理程序传递到调用方的参数。
/// 通知调用方此命令是否已被处理。
///
public void Exec(string commandName, vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled)
{
handled = false;
if (executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
{
if (commandName == "RecentProjectCleaner.Connect.RecentProjectCleaner")
{
DialogResult dr = MessageBox.Show("确定要清除最近项目列表么?", "询问", MessageBoxButtons.YesNo);
if (dr == DialogResult.Yes)
{
Microsoft.Win32.RegistryKey regisKey = Microsoft.Win32.Registry.CurrentUser;
Microsoft.Win32.RegistryKey key = regisKey.OpenSubKey("Software", true);
if (key != null)
{
key = key.OpenSubKey("Microsoft", true);
if (key != null)
{
key = key.OpenSubKey("VisualStudio", true);
}
if (key != null)
{
key = key.OpenSubKey("8.0", true);
}
if (key != null)
{
key = key.OpenSubKey("ProjectMRUList", true);
}
if (key != null)
{
foreach (string p in key.GetValueNames())
{
key.DeleteValue(p, false);
}
}
MessageBox.Show("清除成功,重新启动vs后生效!");
}
}
handled = true;
return;
}
}
}


在程序卸载的时候,卸载菜单项



1 /**////

实现 IDTExtensibility2 接口的 OnDisconnection 方法。接收正在卸载外接程序的通知。
2 /// 描述外接程序的卸载方式。
3 /// 特定于宿主应用程序的参数数组。
4 ///
5 public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom)
6 {
7 object[] contextGUIDS = new object[] { };
8 Commands2 commands = (Commands2)_applicationObject.Commands;
9 string toolsMenuName= "工具";
10 //将此命令置于“工具”菜单上。
11 //查找 MenuBar 命令栏,该命令栏是容纳所有主菜单项的顶级命令栏:
12 Microsoft.VisualStudio.CommandBars.CommandBar menuBarCommandBar = ((Microsoft.VisualStudio.CommandBars.CommandBars)_applicationObject.CommandBars)["MenuBar"];
13
14 //在 MenuBar 命令栏上查找“工具”命令栏:
15 CommandBarControl toolsControl = menuBarCommandBar.Controls[toolsMenuName];
16
17
18 CommandBarPopup toolsPopup = (CommandBarPopup)toolsControl;
19
20 //如果希望添加多个由您的外接程序处理的命令,可以重复此 try/catch 块,
21 // 只需确保更新 QueryStatus/Exec 方法,使其包含新的命令名。
22 try
23 {
24 //将一个命令添加到 Commands 集合:
25 Command command = commands.AddNamedCommand2(_addInInstance, "RecentProjectCleaner", "RecentProjectCleaner", "Executes the command for RecentProjectCleaner", true, 59, ref contextGUIDS, (int)vsCommandStatus.vsCommandStatusSupported + (int)vsCommandStatus.vsCommandStatusEnabled, (int)vsCommandStyle.vsCommandStylePictAndText, vsCommandControlType.vsCommandControlTypeButton);
26
27 //将对应于该命令的控件添加到“工具”菜单:
28 if ((command != null) && (toolsPopup != null))
29 {
30 command.Delete();
31 }
32 }
33 catch (System.ArgumentException)
34 {
35 //如果出现此异常,原因很可能是由于具有该名称的命令
36 // 已存在。如果确实如此,则无需重新创建此命令,并且
37 // 可以放心忽略此异常。
38 }
39 }


这样一个非常简单的vs2005addins就制作成功了,接下来您就可以将该程序部署到你的倚天剑上了,部署方法超级简单,和vs03不同的是,05支持xcopy部署,您可以将RecentProjectCleaner.AddIn和生成的RecentProjectCleaner.dll拷贝到C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Addins,就完成了addins的部署,值得说下的是RecentProjectCleaner.AddIn,这个文件描述了vs2005应该如何认识新增的伙计,它里面定义了宿主应用程序的信息(名称,版本)和addins的信息(所在程序集,类名,加载方式),如果您想在部署后让addins立即被启用,将LoadBehavior设置为1,还有不知道是我本地项目模板的问题还是其他原因,默认创建的RecentProjectCleaner.AddIn里面的Assembly多了.dll。也就是RecentProjectCleaner.dll,这样的dll显然不存在,去掉一个.dll,就可以了
看下部署后的效果吧:重新启动vs2005,点击工具,菜单就多了一项:RecentProjectCleaner,如图

点击外接程序管理器,可以多了一项RecentProjectCleaner
在菜单中点击RecentProjectCleaner,选择清除,重启vs2005,最近列表项就清除了。

这里是源程序,这里只是一个的介绍,大家可以下载下去扩展,很好玩
/Files/jillzhang/RecentProjectCleaner.rar

来源:jillzhang的专栏







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.