1

どうすればPanel.Validate()とを作ることができPanel.ValidateChildren()ますか?

パネルにツールストリップがあるため、これが必要です。2 つのボタン (保存とキャンセル) があります。

保存は and を呼び出す必要がPanel.Validate()ありPanel.ValidateChilden()ます。

Cancel は何も呼び出さないでください。

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public class MyPanel : Panel
    {

        public bool Validate()
        {
            //What to write in here ?
            return true;
        }

        public bool ValidateChildren()
        {
            foreach (Control c in this.Controls)
            {
                //What to write in here ?
            }
            return true;
        }
    }
}

編集: もう少し説明が必要です。ユーザーがテキストボックスを離れると、パネルのテキストボックスが検証されます。しかし、保存ボタンをクリックすると、ユーザーはアクティブなテキストボックスを離れません。したがって、検証されず、破損したデータを保存できます。保存を押した後、テキストボックスに入力を続けたいと思うかもしれないので、(フォーカスを別のコントロールに設定することによって)強制的に彼を離れさせたくありません。

保存ボタンをクリックしたときに Form.ValidateChildren() を呼び出して、現在処理しています。機能しますが、フォーム上のすべてのコントロールを検証します。私のパネルにあるものだけではありません。

private void button1_Click(object sender, EventArgs e)
{
    if (ParentForm.ValidateChildren())
        this.Save();
    else
        MessageBox.Show("Error in validating");
}

EDIT2:

解決しました。Panel の代わりに containercontrol を使用するだけです。それは私が必要なものを与えてくれます。(実は私は今までこのコントロールを知りませんでした)

4

2 に答える 2

0
using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public class MyPanel : Panel
    {

        public bool Validate()
        {
            //What to write in here ?
            return true;
        }

        public bool ValidateChildren()
        {
            foreach (Control c in this.Controls)
            {
                //What to write in here ?
            }
            return true;
        }

        public void Save()
        {
            if (Validate() && ValidateChildren())
            {
                //Do something
            }
        }

        private void Save_Click(object sender, System.EventArgs e)
        {
            Save();
        }
        //something else
    }
}

ここでは、 のコントロールにイベントをアタッチする方法を確認できますWinFormsクリック イベントの例を次に示します。

于 2013-11-05T01:50:12.857 に答える