动态代码片段c#visual studio

我正在开发一个WinForms项目,每天都有一些重复的任务。 所以我认为创建代码片段会帮助我,但它仅适用于固定代码。

我想根据控件名称和一些条件动态创建代码片段。

我想在设计部分完成后添加代码。 我定义控件名称,如intTextboxAge 。 该代码段应使用下面定义的function为所有文本框添加自动validation。

必须根据控件的名称前缀(int,str,dou,dec)进行不同的控制。 像这样:

 public void AutoCode() { int i=0; foreach(On all controls) { if(controls is textbox or combobox) { if(control.text starts with int) { a[i] = Validation.ValidateInt(labelError, control.text, val => acdnt.date = val); } } } } 

我想要一个自动生成的代码片段,库将无法帮助我。

我的动机不是只通过上面的例子生成validation代码就是我们如何做到这一点。

我想自动生成我的所有业务逻辑代码,如主要的胜利forms

  1. validation
  2. 为变量创建新类
  3. validation后在类中填写数据
  4. 自动创建数据库function插入和更新

因为在以上所有任务中只有变量名称更改,其余业务任务保持不变。 我们如何实施

自动创建class- Class将使用表单名称+“Class”创建,变量类型将由前3个char标识,并将命名为与控件名称相同。

自动创建数据库函数insert和update –将名称数据库表名称与表单名称和列名称相同,与控件名称相同,这样它也可以动态创建插入和更新查询。

为什么我不想使用类库,因为在这种情况下它会在运行时执行所有操作,这将在某个地方吃掉我的性能。

有了这个,我们可以节省大量编码世界的时间和精力。

我想在设计部分完成后添加代码。 我定义控件名称,如intTextboxAge。 该代码段应使用下面定义的函数为所有文本框添加自动validation。

最好将CustomControls与自己的validation一起使用,这样您就不需要在设计部分完成后添加代码:

在此处输入图像描述

 //Integer input CustomControl with validation label (pictured above) public partial class intTextBox : UserControl { public bool IsValid {get;set;} public intTextBox() { InitializeComponent(); this.textBox1.TextChanged += this.intTextBox_TextChanged; } private void intTextBox_TextChanged(object sender, EventArgs e) { int n; IsValid = int.TryParse(this.textBox1.Text, out n); label1.Visible = !IsValid; } } 

必须根据控件的名称前缀(int,str,dou,dec)进行不同的控制

虽然您可以使用控件名称前缀,但我建议您通过派生基本控件并简单地测试控件类型来创建自己的UserControl:

 //Decimal input UserControl public class decTextBox : TextBox { public string Text { get { return this.Text; } } public bool IsValid() { decimal n; bool isDecimal = decimal.TryParse(this.Text, out n); return isDecimal; } } 

….

 public Control AutoCode(Control forEgTheForm) { //Tip: You may need to recursively call this function to check children controls are valid foreach(var ctrl in forEgTheForm.Controls) { if(ctrl is TextBoxBase) { if(ctrl is decTextBox) { decTextBox txt = ((decTextBox)ctrl); //If its not a valid value then set a[i]=true/false or in this example return the control... if (!txt.IsValid()) return ctrl; } } } } 

我想根据控件名称和一些条件动态创建代码片段。

如果您要创建代码片段,请根据控件类型执行此操作,而不是控制名称前缀,因此您不需要它们是动态的。


如果不必编写任何代码片段或validation代码,那将更加优雅。 这是理想的解决方案。 我建议使用正确的控件类型。

文本框适用于字符串,但对于int,dec和dbl,最好使用NumericUpDown控件。 这样,用户将直观地知道他们需要输入数字(并且不能输入字母数字字符)。 设置几个NumericUpDown控件属性(在设计时或运行时)后,您将不需要在validation中进行编码:

在此处输入图像描述


我不确定你遇到的性能下降的原因是什么? 虽然我建议您将控件绑定到类库中具有所有业务逻辑的类,以便您可以进行unit testing。 对于前端validation,虽然简单validation输入是正确的,如上所示是要走的路。

您可以尝试基于CodeSmith等脚本的代码生成器(还有免费的东西)。
您可以根据您定义的变量(也基于数据库项)编写脚本,然后生成代码。
生成代码是一种很好的方法,因为节省了时间,但也标准化了代码。

我认为您可以使用System.Reflection命名空间与System.CodeDom命名空间结合来实现您想要的。

您可以使用System.Reflection命名空间和System.Type类中的类来发现程序集名称,命名空间,属性,方法,基类以及有关类或变量的大量其他元数据。 然后,您将使用从您的起始/源类(例如,您的表单类)中获取的这些元数据,使用CodeDOM生成目标类(您的业务和数据类)的代码。

检查如何使用CodeDOM作为起点创建类的 msdn链接。