用户控件,用Public Name as type ,就可以获得一个设计状态下能在属性栏内修改的属性。
设计状态下,UserControl_WriteProperties事件也能捕获这个属性的修改。
但是,这个属性不能保存(就是把加载了那个控件的窗体关闭后打开,这个属性就又变成默认值了)。
各位大虾有这个经验吗?
我不想把这个属性保存在控件外,因为不同实例会冲突的。

解决方案 »

  1.   

    不懂
    INI和注册表不可以吗?
      

  2.   

    怎么会呢?即然WriteProperties事件可以捕获属性值的修改,那么没有理由保存不了啊,看看ReadProperties事件和其他的一些与控件载入时相关的地方是不是对属性进行了赋值?
    或者你可能修改过这个属性的映射关系!很难说清,我以前也遇到过一次,想不起是怎么解决的了。
    你试下将测试工程中的控件删除,重新建新的控件实例看看。个人认为对自定义控件还有些了解,你不妨贴些代码上来,我帮你看看。
      

  3.   

    你说保存在哪里?所有变量在Initialize的时候全部被值为默认值,肯定是不能保存的。
    保存在注册表、文件中吧,控件可不止一个实例,你怎么区分啊?
    不过,标准控件的属性都是修改了就自动保存了的,所以肯定有办法解决的。
    请高手赐教。
      

  4.   

    设计时的保存?没明白你说的“设计时”是什么?是开发控件时的设计时还是使用控件开发程序时的设计时?
    前者,有些是保存在*.ctx和ctl中,而后者是保存在控件所在窗口的frm和frx中,这是我开发的控件,所以我认为我有能力帮你解决问题,贴些代码吧。或者相信我就发些代码过来。
    http://www.vb99.com/product/gifbutton/register.asp
      

  5.   

    是使用控件开发程序时的保存,确实是保存在.Frm中的,关键是怎么用程序保存到Frm中,而且程序不能写在Frm中,要写在CTL中。
      

  6.   

    就是你那个效果,大哥,就跟你的控件里边AutoPlay设成True,关闭窗体,下次打开还是True那个一样的效果。还有用WriteProperties事件捕捉属性值修改要保存的时候才能捕捉到,用什么办法能在属性框里别的项上点一下就能捕捉到的方法?
      

  7.   

    在属性的Let过程中写入PropertyChanged ,如:
    Public Property Let AutoPlay(ByVal New_AutoPlay As Boolean)
        m_AutoPlay = New_AutoPlay
        PropertyChanged "AutoPlay"
    End Property在WriteProperties中保存就行了。
    Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
        Call PropBag.WriteProperty("AutoPlay", m_AutoPlay, m_def_AutoPlay)
    End Sub
      

  8.   

    See了,马上结贴。不过大哥你能不能再告诉偶一点:自定义属性的说明怎么写上去?