【发布时间】:2019-02-10 03:23:29
【问题描述】:
我有一个带有TextBox 的用户控件:
public partial class MyControl : UserControl
{
public new event CancelEventHandler Validating
{
add
{
txt.Validating += value;
}
remove
{
txt.Validating -= value;
}
}
public new string Text
{
get => txt.Text;
set => txt.Text = value;
}
}
我将控件和ErrorProvider 放在表单上并执行以下操作:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
SetErrorEvents(myControl1);
}
private void SetErrorEvents(object control)
{
(control as Control).Validating += ValidationEvent;
}
private void ValidationEvent(object sender, CancelEventArgs e)
{
var control = (Control)sender;
if (string.IsNullOrWhiteSpace(control.Text))
errorProvider1.SetError(control, "error");
else
errorProvider1.SetError(control, string.Empty);
}
}
为我的控件的Validating 事件设置委托时,它是为UserControl 本身设置委托,而不是被覆盖,以便设置TextBox 的事件。
不应该按原样工作吗?我错过了什么?
【问题讨论】:
-
它没有被覆盖,它是新的。
-
@RezaAghaei 我只能设置新的,因为该事件不是虚拟的。如果我这样做
(control as MyControl).Validating += ValidationEvent;它可以工作,但我不能这样做,因为它是一种接受其他类型控件的方法。
标签: c# .net winforms events user-controls