【问题标题】:about the custom button关于自定义按钮
【发布时间】:2011-12-06 02:32:11
【问题描述】:

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

用户控件中的代码:

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)  

// 如果我把它改成overide OnClick(EventArgs e) 问题依旧 //存在

    {
        base.OnClick(e);
        String connstr = @"Provider=OraOLEDB.Oracle;data source=***;user id=***;password=***;";
        OleDbConnection conn = new OleDbConnection(connstr);
        string str = this.sqlstr;
        try
        {
            conn.Open();
            OleDbCommand cmd = new OleDbCommand(str, conn);
            cmd.ExecuteNonQuery();
        }
        catch (Exception ee)
        {
            MessageBox.Show(ee.Message);
        }
        finally
        {
            conn.Close();
        }

    }

}

主框架中的代码:

        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_insert_Click(对象发送者,EventArgs e) { string txtid =txt_id.Text;// 在我的框架中一个名为 txt_id 的标签 string strsql = "插入 mytable (...)values (...)"; btn_insert.SqlStr = strsql; }

用户控件无法接收到SqlStr

【问题讨论】:

  • 地铁?表格? WPF?银光? ASP.NET?单触?
  • 你有一个 SQL 注入漏洞。
  • 在 txt_id 文本框中输入 3' or 1=1; -- 会导致坏事发生
  • 当一个框架中有多个按钮时,它如何具体不起作用?它是否报告错误?它是否执行了错误的 SQL?
  • 目前还不清楚您希望 button1_Click 事件处理程序如何运行。您必须改写 OnClick。

标签: c# button user-controls


【解决方案1】:

我不清楚你想在这里完成什么。但我会尝试解释发生了什么。

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_del_Click 方法。此方法将设置控件的SqlStr 属性。当btn_del_Click 完成时,将继续执行被覆盖的OnClick 方法。它将显示保存在SqlStr 属性中的sql 语句。

我已经用两个按钮和两个事件处理程序进行了尝试。当我单击删除按钮时,将显示删除语句。当我单击“插入”按钮时,将显示插入语句。

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

【讨论】:

    猜你喜欢
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 2015-01-08
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多