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