1

我有一个 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-type 属性的当前内部值(而是显示 Black,即默认值),也不会传回用户所做的任何更改。如果上面明确初始化了 myInternalColor,例如“protected Color myInternalColor = Color.Blue;”,这同样适用。

任何人都可以阐明如何使 Color 属性工作,即正确地将其值传入和传出控件吗?

++++++++++++++++++++++++++++++++++++

现在在我看来,我上面概述的问题可能是 COM 互操作问题。事实证明,我的 VS2008 开发环境中的 UserControl TestContainer 似乎与 Color 属性正确交互,但 VS6 提供的 ActiveX Control Test Container 却没有。控件设计运行的实际容器是基于 COM 的,我敢打赌前面提到的 Ax 测试容器也是如此。

(作为用户控件开发的新手,我似乎无法理解我正在开发的 WinForm 控件在技术上不是 ActiveX 控件,这是我通过最近的研究才知道的区别。)

4

0 回答 0