在VS2010中的winUserControl——属性在设计器中不可见

5

我遇到了一个问题,我认为是和我的Visual Studio 2010 Express环境有关:当我设计自己的UserControl时,在属性网格中,我看不到该控件的公共属性。然而,在引用此控件的项目中,它们是可见的。
由于这是Express版本,我创建了一个新的空项目,然后将新的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中,我记得在属性网格中显示MyNumber属性应该足够了,即使没有[Browsable(true)]属性。然而,在VS 2010中,当我双击解决方案资源管理器中的UserControl1.cs并查看属性时,我看不到MyNumber。
当在另一个项目中引用和使用此控件时,可以访问它的属性。
我尝试彻底重新安装VS 2010环境(包括SP1),但没有成功。您有任何想法吗?
顺便说一下:这些属性都不起作用。
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[Bindable(true)]

最好的问候,
Marcin


可能是[使用泛型EventHandler<>的事件在设计器中不可见]的重复问题(https://dev59.com/Z1DTa4cB1Zd3GeqPJoT6)。 - Shaun Wilson
3个回答

8

我认为这是VS2010的正常行为,并且假设它是有意设计的。在2010 Ultimate中,我的表现也是如此。当您将UserControl1放置在表单上时,您将看到其自定义属性。

我猜测这是因为当您设计控件时,尚不存在您控件的实例(甚至可能尚未编译)。您看到的是UserControl的一个实例。当您编译控件,然后将其添加到表单中时,设计器会创建您控件的一个实例,因此可以查看和操作其属性。


我想那就是这样了 - 我一定搞混了什么,因为我已经有一段时间没有设计用户控件了...我在另外两台安装了VS 2010的电脑上尝试过(包括旧版和新版),但两者都出现了相同的问题。谢谢。 - mj82

0

我以前没有使用过[Browsable]标记。但是下面是我在一个项目中使用的示例。

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

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


很不幸,这也不起作用。据我所知,如果我没有放置任何类别,应该默认有一个类别。 - mj82
除了Billy的答案之外,我刚刚意识到你还需要重建你的项目! - melodiouscode
即使没有类别,任意属性也应该显示在“杂项”下面。但是这可能只适用于VS 2013+? - binki

0

由于VS在设计器中处理ascx的方式,这种方法不起作用。有关详细信息,请参见SO上的这个出色的答案

如果答案不是您预期的内容,您仍然可以将.ascx迁移到用户控件库中,就像我在我的博客中所描述的那样。

如果我有选择的话,我会从头开始编写所有的ascx代码,作为自定义Web服务器控件


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接