首页 文章

对各种用户控件的调用方法

提问于
浏览
0

我在我的应用程序中创建了许多自定义用户控件 . 它们是使用Validates()方法验证自己内容的控件 . 当我单击窗体上的一个按钮时,我想在任何具有该方法的控件上调用此方法 . 实现这一目标的最佳方法是什么?

我能够识别和控制并检查他们是否有方法,但不确定如何在此时调用它 . (所有控件都以'cc'开头)

foreach (Control c in this.Controls)
        {
            if (c.Name.Length > 2 && c.Name.Substring(0, 2).Equals("cc"))
            {
                var type = c.GetType();
                if (type.GetMethod("Validates") != null)
                {
                    // Call method here
                }
            }
        }

任何人都可以指出我正确的方向,或者更好的方式我可以做到这一点 . 我希望这些控件有很多形式,所以我想从父表单中尽可能简单地进行分组验证 .

谢谢,

3 回答

  • 1

    也许尝试使用接口

    public interface IValidateMyData
    {
        bool Validate();
    }
    
    public class ValidationControl : Control, IValidateMyData
    {
        // code here
        public bool Validate()
        {
            return true;
        }
    }
    

    在您的表单中迭代所有控件,但不检查名称,但确定控件是否实现IValidateMyData接口:

    foreach (Control c in this.Controls)
    {
        if ( c is IValidateMyData )
        {
            var validationResult = (c as IValidateMyData).Validate();
        }
    }
    

    使用此方法,您的控件不一定具有特定的名称前缀 .

    此外,您可以将迭代移动到所有控件上,将验证移动到表单继承的基类,并在表单中调用“ValidateAllControls()”方法 .

  • 0

    在WinForms中执行此操作的常用方法是使用Form Validating事件 .

  • 1

    您应该创建一个 interface ,并且每个具有 Validate 方法的控件都应该实现该接口 .

    public interface IValidatable
    {
        void Validates();
    }
    

    并检查循环中的界面 .

    foreach (Control c in this.Controls)
    {
      IValidatable validateControl = c as IValidatable;
      if(validateControl != null)
      {
    
           // do the validation.
           validateControl.Validates();
      }
    

相关问题