我正在用C#编写ActiveX COM控件。在此控件中,我有一个名为“值”的属性,我试图将其公开为默认属性。
这是Typelib定义:
[id(0x00000002), propget, bindable, requestedit, displaybind, defaultbind, helpstring("Returns/sets the current date.")]
HRESULT Value([out, retval] VARIANT* pRetVal);
[id(0x00000002), propput, bindable, requestedit, displaybind, defaultbind, helpstring("Returns/sets the current date.")]
HRESULT Value([in] VARIANT pRetVal);
Property实现很简单:
public object Value
{
get { return BaseControl.Value.Date; }
set
{
DateTime dt;
//BaseControl is a DateTimePicker control.
BaseControl.Value = DateTime.TryParse((value ?? "").ToString(), out dt) ? dt : DateTime.Today;
}
}
在VBA中使用此控件时,我可以这样设置\获取Value
属性
Private Sub Test()
Me.DTPicker1.Value = Date - 5
End Sub
但是当我尝试使用默认版本时,
Private Sub Test2()
'/Default property access
Me.DTPicker1 = Date - 5
End Sub
它引发错误
438:对象不支持此属性或方法。
任何想法,为什么默认模式不起作用?