在Windows Forms开发,常常遇到一件头疼的工作是一个Form界面有许多控件,而这些控件的称号(Name)很难保持命名一致。比方,开发标准里边说,要给一切 的Button命名为以btn开发。若是界面中有二个按钮,断定和撤销,那么能够按照标准,为之命名为btnOK,btnCancel。再扩展到其它的控 件,都应该恪守这样的前缀命名法。
通过收拾,构成下面的表格标准
控件 | 前缀 | 举例 |
Button | btn | btnOK |
ListView | lst | lstProject |
Label | lbl | lblUserName |
Combox | cmb | cmbProjectType |
TextBox | txt | txtUserId |
CheckBox | chk | chkEnable |
GridView | grid | gridProduct |
当一个页面中有许多控件时,怎么确保控件命名,仍是这样的标准呢?
一种办法是有专门的代码查看,俗称Review,常常的花时间去改进代码,保护代码。从根本的命名上查看,修正,以契合标准。另一种办法便是我从高手的代码中学到的,解说如下。
当 你给一个按钮绑定资料库字段或是修正它的Label/Text/Caption特点时,参加设计时撑持,用这个姓名来交换无规律的命名。比方,拖一个按钮 Button控件到窗体中,它的称号是Button1, 这时修正它的Text=OK, 回车承认。这里我截获了控件的特点修正事情,所以修正控件Button1的姓名为btnOK。数据绑定特点也是相同,截获绑定的数据成员的称号,再依据它 来修正控件的称号,比方下面的一段代码所示
private Foundation.WinUI.Misc.Label lblDbPassword; private Foundation.WinUI.Editors.TextEditor txtDbUser; private Foundation.WinUI.Misc.Label lblDbUser; private Foundation.WinUI.Editors.TextEditor txtDbDatabase; private Foundation.WinUI.Misc.Label lblDbDatabase; private Foundation.WinUI.Editors.TextEditor txtDbServer; private Foundation.WinUI.Misc.Label lblDbServer; private Foundation.WinUI.Misc.GroupBox grpConnectionParameter1; private Foundation.WinUI.Editors.Grid grid;
对这些控件的称号,我没有任何的修正,仅仅对它绑定数据特点,结构会主动依据数据源的特点称号,进行修正,所以看起来标准程度高,彻底不需求人为的来履行标准。想象一下,当体系中的窗体许多,控件数量大的时分,这种智能的命名办法是多么的有功率,将代码标准贯彻到底。
这则窍门的完结办法是注册组件改动事情(ComponentChanged),如下面的代码所示
this.Site.GetService(typeof(IComponentChangeService)) as IComponentChangeService
2 .NET Remoting 效劳器端目标主动化装备
先来看一下,根本的.NET Remoting是怎么装备开发的。
先开发效劳器目标,便是要露出给客户端的目标
public class MyObject:MarshalByRefObject
{ public int Add(int a,int b)
{ return a+b;
}
}
效劳器端把它激活,供客户端衔接进来调用
[STAThread] static void Main(string[] args)
{
RemotingConfiguration.Configure("RemoteServer.exe.config");
Console.ReadLine();
}
由于这样的代码很节约,所以还需求在装备文件中作出如下的装备
<configuration> <system.runtime.remoting> <application name="RemoteServer"> <service> <wellknown type="RemoteObject.MyObject,RemoteObject" objectUri="RemoteObject.MyObject" mode="Singleton" /> service> <channels> <channel ref="tcp" port="9999"/> channels> application> system.runtime.remoting> configuration>
客户端代码,调用.NET Remoting效劳
[STAThread] static void Main(string[] args)
{
RemoteObject.MyObject app = (RemoteObject.MyObject)Activator.GetObject(typeof(RemoteObject.MyObject),System.Configuration.ConfigurationSettings.AppSettings["ServiceURL"]);
Console.WriteLine(app.Add(1,2));
Console.ReadLine();
}
相同,仍是需求作出装备才能使上面的代码收效。
<configuration> <appSettings> <add key="ServiceURL" value="tcp://localhost:9999/RemoteObject.MyObject"/> appSettings> configuration>
我提出问题,若是要添加一个效劳器端目标MyObjectB,对上面的代码,需求修正几个当地?
添加代码(效劳完结和效劳接口的调用)是有必要的有些,不行少,别的需求修正的当地:
1 效劳器端的装备文件,添加效劳接口
2 客户端的装备文件,添加对效劳的引证
可是,开发高手给的答案是零修正,添加一个效劳,对效劳端或客户端不需求作出任何的修正。
怎么做到这一点呢,闻名的.NET通讯组件RemObjects ,它供给了一个通用的GUI东西,用于依据效劳端的接口,生成客户端的代码,按照这一点思路。咱们能够思考做一个东西。添加一个效劳器端目标后,为了让它 露出出来可用,要修正的当地是两个装备文件,所以,我只需求当有新的效劳器端目标要露出出来时,运用这个GUI东西,主动完结二个装备文件的修正,即可达 到零修正。并且用东西的优点是不会犯错,即便利又有功率。
我认为这两个思路的确不错,能让体系的可读性增强,又进步工作功率。