C# 关于自定义按钮

C# 关于自定义按钮,c#,button,user-controls,C#,Button,User Controls,我想制作一个按钮(C#winform): usercontrol中的代码: public partial class UserControl1 : Button { string sqlstr; [Description("SQL STRING")] [DefaultValue(typeof(string), "")] public string SqlStr { get { return sqlstr; } set {

我想制作一个按钮(C#winform):

usercontrol中的代码:

public partial class UserControl1 : Button
{
    string sqlstr;

    [Description("SQL STRING")]
    [DefaultValue(typeof(string), "")]
    public string SqlStr
    {
        get { return sqlstr; }

        set { sqlstr = value; }
    }

    private void button1_Click(object sender, EventArgs e)  
//如果我将其改为overideonclick(EventArgs e),问题仍然存在 //存在

主框架中的代码:

        this.btn_del = new mybutton.UserControl1();

        this.btn_del.Click += new System.EventHandler(this.btn_del_Click);

        ......

        private void btn_del_Click(object sender, EventArgs e)
        {
            string txtid =txt_id.Text;// a label called txt_id in my frame
            string strsql = "delete from myTable where id='" + txtid + "'";
             btn_del.SqlStr = strsql;
        }
当大型机有多个按钮时,为什么自定义按钮不起作用? (只有一个按钮接收SqlStr,其他按钮不接收任何内容) 如果框架中有另一个按钮 私有无效btn\u插入\u单击(对象发送者,事件参数e) { string txtid=txt\u id.Text;//我的框架中名为txt\u id的标签 字符串strsql=“insert into mytable(…)value(…)”;btn_insert.SqlStr=strsql; }


用户控件无法接收SqlStr,我不清楚您在这里要实现什么。但我会尽力解释发生了什么

public class UserControl1 : Button {

    string sqlstr;

    [Description("SQL STRING")]
    [DefaultValue(typeof (string), "")]
    public string SqlStr {
        get { return sqlstr; }
        set { sqlstr = value; }
    }

    protected override void OnClick(System.EventArgs e) {
        base.OnClick(e);
        MessageBox.Show(sqlstr);
    }
}
我简化了代码,只证明UserControl收到了正确的sql语句。创建类并生成项目后,应该能够将UserControl1从工具箱拖到窗体上,将其命名为
btn_del
,然后双击它以创建事件处理程序:

void btn_del_Click(object sender, EventArgs e) {
    string txtid = txt_id.Text;
    string strsql = "delete from myTable where id='" + txtid + "'";
    btn_del.SqlStr = strsql;
}
现在,当单击按钮时,执行将从覆盖的OnClick开始。它的第一行是

base.OnClick(e);
基本的OnClick方法的一部分是执行附加到其
Click
事件的任何事件处理程序。因此,它将执行
btn\u del\u Click
方法。此方法将设置控件的
SqlStr
属性。当
btn\u del\u Click
完成时,将继续执行重写的
OnClick
方法。它将显示保存在
SqlStr
属性中的sql语句

我用两个按钮和两个事件处理程序尝试过。单击Delete按钮时,将显示Delete语句。单击Insert按钮时,将显示Insert语句


我不确定这是否是你所期望的。如果不是,请解释你预期会发生什么。如果是,但你看到了其他事情发生,请告诉我们发生了什么。

我不清楚你在这里想要实现什么。但我会尽力解释发生了什么

public class UserControl1 : Button {

    string sqlstr;

    [Description("SQL STRING")]
    [DefaultValue(typeof (string), "")]
    public string SqlStr {
        get { return sqlstr; }
        set { sqlstr = value; }
    }

    protected override void OnClick(System.EventArgs e) {
        base.OnClick(e);
        MessageBox.Show(sqlstr);
    }
}
我简化了代码,只证明UserControl收到了正确的sql语句。创建类并生成项目后,应该能够将UserControl1从工具箱拖到窗体上,将其命名为
btn_del
,然后双击它以创建事件处理程序:

void btn_del_Click(object sender, EventArgs e) {
    string txtid = txt_id.Text;
    string strsql = "delete from myTable where id='" + txtid + "'";
    btn_del.SqlStr = strsql;
}
现在,当单击按钮时,执行将从覆盖的OnClick开始。它的第一行是

base.OnClick(e);
基本的OnClick方法的一部分是执行附加到其
Click
事件的任何事件处理程序。因此,它将执行
btn\u del\u Click
方法。此方法将设置控件的
SqlStr
属性。当
btn\u del\u Click
完成时,将继续执行重写的
OnClick
方法。它将显示保存在
SqlStr
属性中的sql语句

我用两个按钮和两个事件处理程序尝试过。单击Delete按钮时,将显示Delete语句。单击Insert按钮时,将显示Insert语句


我不确定这是否是你所期望的。如果不是,请解释你预期会发生什么。如果是,但您看到其他事情发生,请告诉我们发生了什么。

Metro?WinForms?WPF?银灯?ASP.Net?MonoTouch?您有SQL注入漏洞。键入
3'或1=1--进入你的txt_id文本框会导致不好的事情发生。当一个框架中有多个按钮时,它具体是如何不起作用的?它是否报告错误?它是否执行了错误的SQL?您希望button1\u Click事件处理程序如何运行还不清楚。您必须替代OnClick。Metro?WinForms?WPF?银灯?ASP.Net?MonoTouch?您有SQL注入漏洞。键入
3'或1=1--进入你的txt_id文本框会导致不好的事情发生。当一个框架中有多个按钮时,它具体是如何不起作用的?它是否报告错误?它是否执行了错误的SQL?您希望button1\u Click事件处理程序如何运行还不清楚。您必须替代OnClick。
public class UserControl1 : Button {

    string sqlstr;

    [Description("SQL STRING")]
    [DefaultValue(typeof (string), "")]
    public string SqlStr {
        get { return sqlstr; }
        set { sqlstr = value; }
    }

    protected override void OnClick(System.EventArgs e) {
        base.OnClick(e);
        MessageBox.Show(sqlstr);
    }
}