【问题标题】:winUserControl in VS2010 - properties are not visible in designerVS2010 中的 winUserControl - 属性在设计器中不可见
【发布时间】:2011-10-28 03:35:08
【问题描述】:

我的 Visual Studio 2010 Express 环境存在问题(我想):当我设计自己的 UserControl 时,在 Properties 网格中看不到该控件的公共属性。然而,它们在项目中是可见的,并且引用了此控件。
因为它是 Express Edition,所以我创建了新的空项目,然后将新的 UserControl 添加到它。
然后,为了测试,我输入了以下代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Project1
{
    public partial class UserControl1 : UserControl
    {
        private int myNumber;

        [Browsable(true)]
        public int MyNumber
        {
            get
            {
                return myNumber;
            }
            set
            {
                myNumber = value;
            }
        }


        public UserControl1()
        {
            InitializeComponent();
        }
    }
}  

我记得在 VS 2008 中,即使没有 [Browsable(true)] 属性,在属性网格中显示 MyNumber 属性也应该足够了。然而,在 VS 2010 中,当我在解决方案资源管理器中双击 UserControl1.cs 并查看属性时,我看不到 MyNumber。
当我在另一个项目中引用和使用此控件时,可以访问它的属性。

我尝试重新安装 VS 2010 环境,包括 SP1,但没有成功。你知道有什么问题吗?

顺便说一句:这些属性都不起作用:

[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[Bindable(true)]

最好的问候,
马辛

【问题讨论】:

标签: c# winforms visual-studio-2010 windows-forms-designer


【解决方案1】:

我相信这是 VS2010 的正常行为,并认为这是设计使然。它在 2010 Ultimate 中对我来说表现相同。当您将UserControl1 放在表单上时,您将看到它的自定义属性。

我的猜测是这是因为当您设计控件时,还没有您的控件的实例(它甚至可能还没有被编译)。您正在查看的是UserControl 的一个实例。当您编译控件并将其添加到表单时,设计器会创建控件的实例,因此可以查看和操作其属性。

【讨论】:

  • 我想就是这样 - 我一定混合了一些东西,自从我上次设计 UserControl 已经有一段时间了......我已经在其他 2 台带有 VS 2010 的计算机上尝试过它(新旧安装) ,并且两者都有相同的行为。谢谢。
【解决方案2】:

我之前没有使用过 [Browsable] 标签。然而,下面是我在我的一个项目中使用的示例。

[Description("The length used to display the dimensions")]
[Category("Custom")]
public double DisplayLength { get; set; }

我猜你需要添加一个类别。

【讨论】:

  • 不幸的是,它也不起作用。 AFAIK,如果我不放任何类别,默认情况下应该有一个。
  • 在比利的回答之上。正如我刚刚意识到的那样,您还需要重建您的项目!
  • 即使没有类别,任意属性也应显示在“杂项”下。但也许这只适用于 VS 2013+?
【解决方案3】:

由于 VS 在 Designer 中处理 ascx 的方式,这将不起作用。有关详细信息,请参阅 SO 上的this excellent answer

如果答案不是您所期望的,您仍然可以将 .ascx'es 迁移到我在 my blog 中描述的用户控件库。

如果我可以选择,我会将我的所有 ascx 代码重新设置为 Custom Web Server Controls

【讨论】:

    猜你喜欢
    • 2011-08-10
    • 2021-08-15
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多