C#COM,设置属性不按预期工作

时间:2016-06-13 21:48:02

标签: c# properties interface com activex

我正在创建C# COM ActiveX控件。现在坚持一件事而且无法理解它。

当我创建stdole.IFontDisp类型的属性时,在控件初始化或我们尝试从客户端代码访问它时,不会调用此属性的Set部分。也没有错误消息。它什么也没做。

此前IFontDisp已转换为stdFont,但我通过手动修改TypeLib / IDL解决了这个问题。感谢:C# and COM, IFontDisp getting converted to StdFont

财产实施(C#):

public stdole.IFontDisp Font_Design_Time_Only
    {
       get
       {
           System.Drawing.Font fnt = new System.Drawing.Font(base.Font.Name, 
                  base.Font.Size, base.Font.Style, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
           return ActiveXCtrlHelper.GetIFontDispFromFont(base.Font);                  
       }
       set
       {
           // _stdFont = value;
           _TestFont = value;
           base.Font = this.ctrl_test.Font= ActiveXCtrlHelper.GetFontFromIFontDisp(value);
           this.ctrl_test.Invalidate();
           base.Invalidate();

       }
    }

IDL:

[id(0x60020018), propput, bindable]
HRESULT Font_Design_Time_Only([in] IFontDisp* ppFontDisp);
[id(0x60020018), propget, bindable]
HRESULT Font_Design_Time_Only([out, retval] IFontDisp** ppFontDisp);
[id(0x60020018), propputref, bindable]
HRESULT Font_Design_Time_Only([in] IFontDisp* ppFontDisp);

VBA:       此代码无效。永远不会调用Set访问者。

Me.Dummy_Control.Font_Design_Time_Only.Bold = True 

但也没有引起任何错误。

以下代码在哪里工作并调用Set部分

    Dim x As IFontDisp
    Set Me.Dummy_Control.Font_Design_Time_Only = x

为什么我会出现这种行为?

提前谢谢。

/#/

更新:

/#/

IFontDisp实施:

 [ClassInterface(ClassInterfaceType.None)]
    [ComSourceInterfaces(typeof(Ictrl_testEvents))]
    [Guid("C04102EB-5DE2-4CC0-9DC7-C82498FC9AFE")]
    public partial class ctrl_test : UserControl, Ictrl_test, IObjectSafety, IFontDisp{

// ......其他代码

 #region IFontDisp Impelmentation
        public bool Bold
        {
            get { return _FBold; }
            set { _FBold = value; }
        }
//rest of the implementation

0 个答案:

没有答案