0

昨日、WinForm にあるグループボックス内のコントロールの検証イベントをいくつか実装しました。フォームの AutoValidate プロパティを Disabled に設定し、コントロールの CausesValidation プロパティを true に設定し、コントロールの Validating イベントを実装しました。フォームの ValidateChildren() メソッドを呼び出すことで、検証イベントが強制的に実行されます。これはすべて正常に機能していました。

しかし、このグループボックスをピクチャボックスの上に配置し、ピクチャボックスをグループボックスの親として設定すると、検証イベントは実行されなくなります....

いくつかのデモコードの下。フォームには、ピクチャボックス、グループボックス、テキストボックス、およびボタンのみが含まれています。

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;
    }
}
4

1 に答える 1

1

ValidateChildren()メソッドは、ValidateChildren(ValidationConstraints.Selectable)を呼び出してジョブを実行します。これはPictureBoxの問題であり、選択できません。したがって、その子も検証されません。

ValidationConstraints.Noneを使用して呼び出すこともできません。子コントロールを検証する機能は、ContainerControlによって実装され、PictureBoxはそれから派生しません。したがって、PictureBoxでValidateChildrenを呼び出すこともできません。コントロールを自分で列挙してValidatingイベントをトリガーすることもできません。PerformControlValidation()メソッドは内部にあります。

PictureBoxをContainerControlに変えようとするアイデアを再考する必要があります。ほとんどのコントロールは、BackgroundImageプロパティを介さずに、Paintイベントを介していない場合でも、画像ボックスに似ています。

于 2012-08-01T10:13:19.293 に答える