|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
C#中有两处地方用到new关键字,第一处也是最常见的一处是用在调用构造函数的时候,这种情况也是大家见的最多的一种。另一处是用在派生类中,作用有隐藏成员,切断继承关系等,相信第二处的用法大家明显要比第一处生疏。上一章次要讲了这个插件的操纵界面与功效,这一章我们入手下手解说怎样完成该插件。
创立Add-In项目
翻开VS,创立新项目->选择别的项目范例->VisualStudio外接程序。以下图:
断定,下一步直到完成,注重在第四页的时分修正一下默许值,以下图:
在项目创立完成后,VS将会主动天生一个Connect.cs文件。该文件包括良多个办法,分离为插件在分歧性命周期将会触发的办法。这里我们只必要存眷Exec办法就能够了,这个办法是我们在挪用该插件时将会实行的办法。在这个文件,我们还必要也许懂得一下DTE2接口,由于我们必要将主动天生的_ApplicationObject工具付与一会我们将要创立的WinForm窗体。DTE2接口在MSDN中的注释是:VisualStudio主动化工具模子中的顶级工具,它承继自DTE接口,而DTE工具暗示VisualStudio集成开辟情况(IDE),这里我们就了解为它就是我们的IDE情况了。
源码解说
接着我们在项目中新建一个WinForm窗体TableConfig。由于在该窗体中必要对宿主项目举行操纵,以是我们必需创立一个DTE2工具,并在Connect.cs文件中将_ApplicationObject工具赋给它。代码以下:
publicpartialclassTableConfig:Form
{
publicTableConfig()
{
InitializeComponent();
}
publicDTE2DTEObject
{
get;
set;
}
}
然后改写Connect.cs中的Exec办法以下:
publicvoidExec(stringcommandName,vsCommandExecOptionexecuteOption,refobjectvarIn,refobjectvarOut,refboolhandled)
{
handled=false;
if(executeOption==vsCommandExecOption.vsCommandExecOptionDoDefault)
{
if(commandName=="CreateCode.Connect.CreateCode")
{
TableConfigform=newTableConfig();
form.DTEObject=_ApplicationObject;
form.ShowDialog();
handled=true;
return;
}
}
}
依照上一章的界面先容,将所需的控件拖到WinForm窗体中。WinForm窗体的cs文件代码人人能够在源码中检察,没有甚么出格的中央。这里就不讲了。
终极的源文件以下图所示,我们逐一解说一下。
1、Common.cs的源码以下:
//猎取表或视图的列布局
publicDataTableGetTableFrame(stringtablename)
{
stringsql=@"selectrow_number()over(orderbycolumn_idasc)asID,A.is_computedasiscomputed,A.is_identityasisidentity,
A.nameascolumnname,B.namecolumntype,A.max_lengthascolumnlength
fromsys.columnsA
leftjoinsys.typesBonA.system_type_id=B.system_type_id
whereobject_id=object_id("+tablename+")";
returndbhelpsql.GetData(sql);
}
//猎取表的主键信息
publicDataTableGetTableKeys(stringtablename)
{
stringsql=@"selecto.nameastablename,c.nameascolumnname,d.nameascolumntype,c.max_lengthascolumnlength
fromsys.indexesi
joinsys.sysindexkeyskoni.object_id=k.idandi.index_id=k.indid
joinsys.objectsooni.object_id=o.object_id
joinsys.columnsconi.object_id=c.object_idandk.colid=c.column_id
joinsys.typesdonc.system_type_id=d.system_type_id
whereo.type=u
andexists(select1fromsysobjectswherextype=PKandname=i.name)
ando.name="+tablename+"orderbyk.colidasc";
returndbhelpsql.GetData(sql);
}
这两个办法次要是用来猎取指表的布局信息,假如有看不懂的中央,请考参sql目次视图来了解。
2、CreateFile.cs的源码以下:
publicclassCreateFile
{
//代表整合式开辟情况(IDE)中一切的项目和合用全部计划的属性
Solution3solu;
publicCreateFile(Solution3_solu)
{
this.solu=_solu;
}
publicvoidCreateItem(stringItemName,stringFolder,stringfileName)
{
//获得计划中今朝项目标汇合
Projectsprojects=solu.Projects;
foreach(Projectpiinprojects)
{
if(pi.Name==ItemName)
{
//ProjectItem暗示项目中的项
foreach(ProjectItempinpi.ProjectItems)
{
if(p.Name==Folder)
{
//GetProjectItemTemplate传回指定项目项目范本的路径(范本称号,用以撰写范本的言语)
//这里的Class.zip与CSharp是vs自带的class类项目模板
stringtemplatePath=solu.GetProjectItemTemplate("Class.zip","CSharp");
//AddFromTemplate(FileName,Name)在现有项模板文件中创立一个新项目项并将其增加到项目中(模板项目文件的完全路径和文件名,新项目项的文件名)
p.ProjectItems.AddFromTemplate(templatePath,fileName+".cs");
break;
}
}
}
}
}
}
CreateItem办法功效,就是先在办理计划中,找到指定的项目,然后在找到的项目中,找到指定的文件夹,然后在找到的文件夹中,创立指定的文件。假如有一项没有满意,则不创立任何文件。基础上每段代码下面我都有增添了正文,以是应当不难了解。假如有对”项目范本”这个观点不太分明的同砚,能够到百度中搜刮一下。我们在vs项目中增加的每一个文件城市有一个对应的模板文件。我们也能够本人创立与增加模板文件。
3、DataType.cs文件次要就是sqlserver与C#变量范例的对应,由于在天生DAL层数据的时分,这二者之间是必要转换的。
4、DbHelperSQL.cs,MyMessageBox.cs,TableFrame.cs,tools.cs是帮助类,没甚么出格的中央。
余下三个文件源码对照长,放鄙人一章。C#中有两处地方用到new关键字,第一处也是最常见的一处是用在调用构造函数的时候,这种情况也是大家见的最多的一种。另一处是用在派生类中,作用有隐藏成员,切断继承关系等,相信第二处的用法大家明显要比第一处生疏。 |
|