0

我需要一种使用通用调用在表单上设置属性的方法。我有一个创建单例表单的静态类,一个主表单(MDI)进行调用,该类负责调用,知道显示、打开等。

一切都很顺利,直到我意识到我需要在表单上设置属性。我可以做到,但我希望在表单加载之前进行分配。

我想出了一个方法来完成这个,至少我认为我有一个很酷的想法,但是......让我们看看代码:

    public interface IFormBase
    {
        Action<IFormBase> SetParameters { get; set; }
    }

    public class FormBase : Form, IFormBase
    {
        public Action<IFormBase> SetParameters { get; set; }

        protected override void OnLoad(EventArgs e)
        {
            if (SetParameters != null)
            {
                SetParameters.Invoke(this);
            }
            base.OnLoad(e);
        }
    }

...稍后在 FormManager 静态类中...

        public TResult GetSingleTonForm<TResult, T>(object state, Action<T> setParameters)
            where TResult : FormBase
            where T : IFormBase
        {
            Type t = typeof(T);
            FormBase f = null;

            if (f == null)
            {
                f = (FormBase)Activator.CreateInstance(t);
            }

            if (setParameters != null && f is IFormBase)
            {
                f.SetParameters = setParameters;
            }

            return (TResult)f;
        }
...

问题:

无法将类型隐式转换System.Action<T>System.Action<blabla.IFormBase>

我了解该错误,我正在寻求帮助以制定不同的解决方案!谢谢!

4

1 回答 1

0

那这个呢:

public T GetSingleTonForm<T>(object state, Action<T> setParameters)
            where T : FormBase, IFormBase 
        {
            Type t = typeof(T);
            FormBase f = null;
            if (f == null)
            {
                 f = (FormBase)Activator.CreateInstance(t);
            }

            if (setParameters != null && f is IFormBase)
            {
                setParameters.Invoke((T)f);
            }

            return (T)f;
        }

它确实可以编译,我认为它可以满足您的需求。这样你就不需要你的OnLoad电话了FormBase

于 2012-10-11T16:54:22.787 回答