在C#项目中使用ActiveX控件,其中ocx中存在Size(float,float,float)

时间:2011-07-20 19:19:06

标签: c# activex

我正在尝试编写一个在.NET 3.5项目中使用第三方ActiveX控件的程序。我使用工具箱将它添加到我的表单中,它将AxLEADLib,LEADLib和stdole添加到我的项目的引用中。

然而,自动生成的代码放入

this.axLEAD1.Size = new System.Drawing.Size(100, 50);

但在AxLEAD中同时存在

public System.Drawing.Size Size {get; set;}
public virtual short Size(float fWidth, float fHeight, short iFlags)

因此,当我尝试在我的表单上设置控件的大小时,在designer.cs中我收到错误Cannot assign to 'Size' because it is a 'method group'。我该怎么做才能解决这个问题?如何设置控件的大小?

这是一个从VB6移植的项目,在旧项目中似乎没有做任何特殊处理来处理这个问题。

2 个答案:

答案 0 :(得分:1)

这是一种特定于.NET的故障模式,由AxHost包装器引起。 Size属性继承自Control,并与ActiveX控件中的Size方法冲突。

不太容易修复。使用/ source命令行选项运行AxImp.exe,以便生成代码而不是程序集。然后,您可以编辑代码并将其添加到项目中。编辑很棘手,因为它是一个继承的属性。像这样:

[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new Size Size { get; set; }

public Size Size2 { 
   get { return base.Size; }
   set { base.Size = value; }
}

第一个隐藏了设计器的Size属性。您可以在设计器中设置Size2属性。

答案 1 :(得分:0)

我无法让Hans的解决方案正常工作,但我确实找到了解决方法。我将错误行更改为

((Control)this.axLEAD1).Size = new System.Drawing.Size(100, 50);

它工作正常。我只需要在每次代码重新生成时纠正它。