C# 正在验证picturebox的子控件未激发的事件
昨天,我为WinForm上的groupbox中的控件实现了一些验证事件。我已将窗体的AutoValidate属性设置为Disabled,我已将控件的CausesValidation属性设置为true,并实现了控件的验证事件。通过调用表单的ValidateChildren()方法,我强制执行验证事件。这一切都很顺利 但在将此groupbox放置在picturebox顶部并将picturebox设置为groupbox的父级之后,验证事件将不再执行 下面是一些演示代码。表单仅包含picturebox、groupbox、textbox和按钮C# 正在验证picturebox的子控件未激发的事件,c#,winforms,events,picturebox,validating,C#,Winforms,Events,Picturebox,Validating,昨天,我为WinForm上的groupbox中的控件实现了一些验证事件。我已将窗体的AutoValidate属性设置为Disabled,我已将控件的CausesValidation属性设置为true,并实现了控件的验证事件。通过调用表单的ValidateChildren()方法,我强制执行验证事件。这一切都很顺利 但在将此groupbox放置在picturebox顶部并将picturebox设置为groupbox的父级之后,验证事件将不再执行 下面是一些演示代码。表单仅包含picturebox、
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void textBox1_Validating(object sender, CancelEventArgs e)
{
MessageBox.Show("Validating textbox");
e.Cancel = true;
}
private void button1_Click(object sender, EventArgs e)
{
if (ValidateChildren())
MessageBox.Show("Validation not executed :-(");
else
MessageBox.Show("Validation executed :-)");
}
private void Form1_Load(object sender, EventArgs e)
{
groupBox1.Parent = pictureBox1;
}
}
ValidateChildren()方法调用ValidateChildren(ValidationConstraints.selective)以完成作业。这是PictureBox的一个问题,它是不可选择的。因此,它的孩子也没有得到验证
使用ValidationConstraints调用它。任何一个都不起作用,验证子控件的功能是由ContainerControl实现的,PictureBox不是从中派生出来的。所以你也不能在PictureBox上调用ValidateChildren。自己枚举控件并触发验证事件也无法工作,PerformControlValidation()方法是内部的
您需要重新考虑将PictureBox转换为容器控件的想法。大多数控件都可以类似于picturebox,如果不是通过BackgroundImage属性,则是通过Paint事件。否,如果不添加任何参数,则默认情况下使用ValidationConstraints。无。我还通过将此约束添加到ValidateChildren方法来检查这一点,但没有任何成功的结果。因为这不可能通过BackgroundColor属性(set color=transparent)实现,所以我使用picturebox,然后我就不必自定义绘制事件。但其结果是,通过ValidateChildren()进行的验证不再有效。除了定制绘画事件,没有其他解决方案了吗?我已经测试过了,这确实有效。但这意味着我必须为我的应用程序的每个表单创建一个用户控件,并将所有控件和逻辑从表单移动到用户控件……任何剪切粘贴都无法解决。通过将任何窗体的TopLevel属性设置为false,可以将其转换为用户控件。这偏离了主题,如果您想了解更多信息,请单击“提问”。