我有一个C#ActiveX控件,其界面定义类似于:
int MyInt { get; set; }
string MyString { get; set; }
Color MyColor { get; set; }
接口实现如下:
protected int myInternalInt;
protected string myInternalString;
protected Color myInternalColor;
public int MyInt { get { return myInternalInt; } set { myInternalInt = value; } }
public string MyString { get { return myInternalString; } set { myInternalString = value; } }
public Color MyColor { get { return myInternalColor; } set { myInternalColor = value; } }
int和string属性(以及我尝试过的其他基本类型)按预期工作,但Color类型没有。控件的属性页正确解释类型并填充下拉列表以选择Color类型。但是,它不显示Color-type属性的当前内部值(显示黑色,即默认值),也不会传回用户所做的任何更改。如果myInternalColor在上面显式初始化,例如“protected Color myInternalColor = Color.Blue;”,则同样如此。
任何人都可以了解如何使Color属性正常工作,即正确地将其值传入和传出控件吗?
++++++++++++++++++++++++++++++++
现在我觉得上面提到的问题可能是COM Interop问题。事实证明,VS2008开发环境中的UserControl TestContainer似乎正确地与Color属性交互,但VS6提供的ActiveX控件测试容器却没有。控件设计用于运行的实际容器是基于COM的,我打赌上述Ax测试容器也是如此。
(并且对用户控件开发不熟悉,看起来我无法理解我正在开发的WinForm控件在技术上不是ActiveX控件,这是我通过最近的研究才知道的区别。)< / p>