【问题标题】:How to initialize my web control properties at design-time?如何在设计时初始化我的 Web 控件属性?
【发布时间】:2009-10-31 19:20:16
【问题描述】:

我需要一种方法来在将 Web 控件拖放到设计器区域时对其属性进行初始化。作为“初始化”,我的意思是:如果我的控件有一个属性 Prop1。我需要为 Prop1 分配一个值,并且我需要将此值保留在 ASPx 上。

我尝试了以下方法:

  1. 在我的 ControlDesigner 上实现 InitializeNewComponent:永远不会调用此方法。这似乎是一个错误。
  2. 在我的 ControlDesigner 上实现 Initialize:调用此方法,但不知何故 Visual Studio 不允许我在此阶段更改控件的属性。
  3. 为 IComponentChangeService.ComponentAdded 创建一个处理程序(应该在每次创建任何控件时调用)。永远不会调用此处理程序。

我的问题:如何初始化我的控件属性?

PS:我知道如何设置控件的属性。我使用以下代码在智能标签上运行良好:

PropertyDescriptor descriptor = TypeDescriptor.GetProperties(this.Component)["Prop1"];
descriptor.SetValue("Value");

编辑

我忘了说我不能使用 ToolBoxData 因为我需要进行处理以确定属性的值

【问题讨论】:

    标签: c# .net asp.net visual-studio design-time


    【解决方案1】:
    [ToolboxData("<{0}:MyControl runat=\"server\" Prop1=\"Value\" />")]
    public class MyControl
    {
    }
    

    【讨论】:

    • 哦不..您的回答完美地解决了我描述的问题,但不是我的问题。我忘了提到这个解决方案无效,因为我需要进行处理以确定属性的值。它不是静态的。无论如何,谢谢并支持。
    【解决方案2】:
    descriptor.SetValue("Value");
    

    没有这样的方法。 MSDN 我也不太明白你为什么要使用反射来设置已知类型的属性?

    也许这可以帮助你一点:A Crash Course on ASP.NET Control Development: Design-Time Features and Capabilities

    【讨论】:

    • 1) 是的,这个方法是存在的。 2)我没有使用反射,我使用的是 ComponentModel,这是必需的,以便 Visual Studio 可以更新 ASPx 和 PropertyGrid。
    猜你喜欢
    • 2013-06-16
    • 2012-12-15
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 2016-12-31
    相关资源
    最近更新 更多