动态代码片段c#visual studio

Hot*_*tud 12 .net c# visual-studio code-snippets

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

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

我想在设计部分完成后添加代码.我定义控件名称intTextboxAge.该代码段应使用下面定义的功能为所有文本框添加自动验证.

必须根据控件的名称前缀(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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

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

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

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

Jer*_*son 7

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

最好让CustomControls具有自己的验证,这样您就不需要在设计部分完成后添加代码:

在此输入图像描述

//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;
    }
}
Run Code Online (Sandbox Code Playgroud)

必须根据控件的名称前缀(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;
    }
}
Run Code Online (Sandbox Code Playgroud)

....

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;
             }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

...


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

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

在此输入图像描述


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