【问题标题】:Component - Subclass event c#组件 - 子类事件 c#
【发布时间】:2013-12-06 21:19:46
【问题描述】:

我有一个类,我想把它封闭成一个组件。我尝试使其工作,基于以下代码,

问题是,属性在属性浏览器中是可编辑和可查看的,并且测试事件是可查看的,但不能仅从代码中从属性浏览器填充。

我该如何解决这个异常?

namespace TestComponents
{
  public partial class Test: Component
  {
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public SubClass SubClass { get; set; }

    public Test()
    {
      InitializeComponent();
      SubClass = new SubClass();
    }
  }

  public delegate void TestEventHandler(Object sender, TestEventArgs e);

  public class TestEventArgs: EventArgs
  {
    public Boolean Test { get; set; }

    public TestEventArgs(Boolean ATest): base()
    {
      Test = ATest;
    }
  }

  [TypeConverterAttribute(typeof(System.ComponentModel.ExpandableObjectConverter))]
  public class SubClass
  {
    public Boolean TestProperty { get; set; }
    public event TestEventHandler TestEvent;

    protected virtual void OnTestEvent(TestEventArgs e)
    {
      if (TestEvent != null)
        TestEvent(this, e);
    }
  }
}

【问题讨论】:

    标签: c# winforms events components subclass


    【解决方案1】:

    怀疑属性编辑器不知道它应该如何处理与复杂 TestEventArgs 类相关的输入,因此您无法在 Visual Studio 属性编辑器中进行编辑。

    您可以看看编写Custom UI Type Editor,然后使用EditorAttribute 指定自定义编辑器:

    [EditorAttribute(typeof(YourCustomEditor),typeof(System.Drawing.Design.UITypeEditor))]
    

    【讨论】:

    • 但是如果我直接在组件内部而不是在子类中声明事件,那么双击Visual Studio 将自动为该事件创建代码,而不声明任何编辑器属性...
    • 我很困惑。根据您的代码,您的事件在子类中吗?属性网格显示属性的对象是什么?测试还是子类?屏幕截图可能会有所帮助。
    • 好的,我现在明白你的意思了。我怀疑,这是 PropertyGrid 的一个限制,它支持为使用 DesignerSerializationVisibility 公开的事件添加双击事件。如果您按照我上面的建议为子类创建自定义 UI 类型编辑器,而不是使用 DesignerSerializationVisibility 强制它进入测试属性网格,可能会起作用?
    【解决方案2】:

    问题解决了。如果子类继承自 Component,Visual Studio 可以很好地管理“子类事件”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 2021-04-05
      • 2015-07-19
      • 1970-01-01
      • 2015-03-18
      • 2016-12-08
      • 2019-07-20
      相关资源
      最近更新 更多