none
请教一下开发控制时使用 Public Property 没有出现在属性窗口的问题. RRS feed

  • 问题

  • 请问,在使用中为什么只能在代码中调用 SetListType 这个方法,而不能在属性窗口设置?

    以下为控件完整代码:

    Imports System.ComponentModel
    Public Class PreviewFrame
    
        Public Enum ShowType
    
            vertical
            Horizontal
    
        End Enum
    
        Dim ListDirection As ShowType = ShowType.vertical
    
        <DesignerSerializationVisibility(1), Browsable(True), Category("外观")>
        Public Property SetListType As ShowType
    
            Get
    
                Return ListDirection
    
            End Get
    
            Set(ByVal value As ShowType)
    
                ListDirection = value
    
            End Set
    
        End Property
    
    End Class

    2015年8月6日 16:13

答案

  • 奇怪,我这里没有任何问题。你确定使用的是编译后的dll了吗?

    我的测试工程很简单,建立一个library类型的dll,加入一个User Control. 在user control上放几个简单的控件:

    C#代码也很简单,就是点按钮的时候,把属性的值赋给控件

        public partial class UserControl1 : UserControl
        {
            public enum ShowType
            {
                Vertical,
                Horizontal
            }
    
            public UserControl1()
            {
                InitializeComponent();
            }
            
            
            [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
            [Browsable(true)]
            [Category("Appearance")]
            public string FirstName { get; set; }
    
    
            [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
            [Browsable(true)]
            [Category("Appearance")]
            public string LastName { get; set; }
    
            [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
            [Browsable(true)]
            [Category("Appearance")]
            public ShowType SetListType { get; set; }
    
            private void button1_Click(object sender, EventArgs e)
            {
                tbFirstName.Text = FirstName ?? "";
                tbLastName.Text = LastName ?? "";
                tbListType.Text = SetListType.ToString();
            }
        }

    编译后,在一个winform工程中,引用这个dll, 然后把user control放到一个form中。

    属性窗口中都可以看到啊

    运行时,点击按钮,text也都显示在textbox中了。

    我用的是VS2012 professional. 工程都是4.5.1的.net framework. 

    你要是需要,我可以把测试工程发给你。

    2015年8月7日 0:27

全部回复

  • 奇怪,我这里没有任何问题。你确定使用的是编译后的dll了吗?

    我的测试工程很简单,建立一个library类型的dll,加入一个User Control. 在user control上放几个简单的控件:

    C#代码也很简单,就是点按钮的时候,把属性的值赋给控件

        public partial class UserControl1 : UserControl
        {
            public enum ShowType
            {
                Vertical,
                Horizontal
            }
    
            public UserControl1()
            {
                InitializeComponent();
            }
            
            
            [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
            [Browsable(true)]
            [Category("Appearance")]
            public string FirstName { get; set; }
    
    
            [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
            [Browsable(true)]
            [Category("Appearance")]
            public string LastName { get; set; }
    
            [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
            [Browsable(true)]
            [Category("Appearance")]
            public ShowType SetListType { get; set; }
    
            private void button1_Click(object sender, EventArgs e)
            {
                tbFirstName.Text = FirstName ?? "";
                tbLastName.Text = LastName ?? "";
                tbListType.Text = SetListType.ToString();
            }
        }

    编译后,在一个winform工程中,引用这个dll, 然后把user control放到一个form中。

    属性窗口中都可以看到啊

    运行时,点击按钮,text也都显示在textbox中了。

    我用的是VS2012 professional. 工程都是4.5.1的.net framework. 

    你要是需要,我可以把测试工程发给你。

    2015年8月7日 0:27
  • 其实我以前在单独开发控件的时候,编译出来,也是没有问题的.

    但这次我是直接在工程源码中建控件,才出现这样的问题.

    因为这个源码中要多次使用相同的GDI+开发的控件,才这样去做的.

    2015年8月7日 6:51
  • 谢谢你的回答, 我突然发现在属性窗口中又出现了.不单单是代码中可调用了.

    可能是因为我关了源码,第二天重新打开源码就可以了. 

    不知道在工程中建控件怎样编译.

    2015年8月7日 6:55