C# 正在验证picturebox的子控件未激发的事件

C# 正在验证picturebox的子控件未激发的事件,c#,winforms,events,picturebox,validating,C#,Winforms,Events,Picturebox,Validating,昨天,我为WinForm上的groupbox中的控件实现了一些验证事件。我已将窗体的AutoValidate属性设置为Disabled,我已将控件的CausesValidation属性设置为true,并实现了控件的验证事件。通过调用表单的ValidateChildren()方法,我强制执行验证事件。这一切都很顺利 但在将此groupbox放置在picturebox顶部并将picturebox设置为groupbox的父级之后,验证事件将不再执行 下面是一些演示代码。表单仅包含picturebox、

昨天,我为WinForm上的groupbox中的控件实现了一些验证事件。我已将窗体的AutoValidate属性设置为Disabled,我已将控件的CausesValidation属性设置为true,并实现了控件的验证事件。通过调用表单的ValidateChildren()方法,我强制执行验证事件。这一切都很顺利

但在将此groupbox放置在picturebox顶部并将picturebox设置为groupbox的父级之后,验证事件将不再执行

下面是一些演示代码。表单仅包含picturebox、groupbox、textbox和按钮

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,可以将其转换为用户控件。这偏离了主题,如果您想了解更多信息,请单击“提问”。