c# - 关于自定义按钮

标签 c# button user-controls

我想做一个按钮(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)  

//如果我将其更改为覆盖 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,其他按钮什么都接收不到) 如果框架中有另一个按钮 private void btn_insert_Click(object sender, EventArgs e) { string txtid =txt_id.Text;//在我的框架中一个名为 txt_id 的标签 string strsql = "insert into mytable (...)values (...)"; 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_del_Click 方法。此方法将设置控件的 SqlStr 属性。 btn_del_Click 完成后,将继续执行覆盖的 OnClick 方法。它将显示保存在 SqlStr 属性中的 sql 语句。

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

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

关于c# - 关于自定义按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8394669/

相关文章:

android - 如何使用 color.xml 文件中的颜色资源动态应用按钮背景颜色

c# - 将控件拖放到自定义用户控件上会隐藏

c# - .NET 2.0 应用程序可以使用 .NET 3.5 的哪些功能?

c# - Visual Studio 在 Rebuild 上从依赖项项目复制 "Content"文件,但在 Build 上不复制

button - 切换按钮和开关的区别

android - 在 ExpandableListView 中隐藏按钮

c# - 如何使用 C# 迭代 "Related Links"

asp.net - 在 ASPX 文件中注册时自定义事件不起作用

c# - HTMLAgilityPack 选择注释之间的节点

c# - 由于其保护级别,公共(public)无效方法无法访问