0

VB6プロジェクトをC#.netに変換しています。
VB6コードはです。

 Dim ctlControl As VB.VBControlExtender
 Dim objControl As DocSys.IControl



If blnRetVal Then

    ' get IControl interface
    On Error Resume Next
    Set objControl = ctlControl.object
    blnRetVal = objControl.Load(strName, ndControl, objField, objTab.Model)

その中で、ユーザーコントロールは動的に使用しています。
objControlのタイプは、インターフェイスであるIControlです。IControlは、(Button、Chekbox、Addressなど)のような多くのユーザーコントロールに実装されています。

このコードをC#.netに変換しています。
コードは

Control ctlControl = new Control();
DocSys.IControl objControl = default(DocSys.IControl);
 if (blnRetVal)
  {                    
    objControl = (IControl)ctlControl;  
     blnRetVal = objControl.Load(strName, ndControl, objField, objTab.Model);
  }

例外ctlControlが表示されます。

Cannot cast 'ctlControl' (which has an actual type of 'System.Windows.Forms.Control') to 'DocSys.IControl'  DocSys.IControl
4

3 に答える 3

1

ほとんどの WinForm コントロールは から継承します。コントロールSystem.Windows.Forms.Controlに IControl-Interface を実装させたい場合は、basic-controls を拡張する必要があります。

お気に入り:

public class MyTextBox : System.Windows.Forms.TextBox, DocSys.IControl
{
    public string Test() // Function of IControl
    {
        throw new NotImplementedException();
    }
}

フォームにコントロールを動的に追加するには、次のコード例を使用できます。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        MyTextBox textBox = new MyTextBox();
        textBox.Text = "Textbox content";
        textBox.Location = new Point(25, 25);
        this.Controls.Add(textBox);
    }
}

実行時に Windows フォームにコントロールをプログラムで追加する方法

于 2012-11-26T13:51:25.680 に答える
0

デニス私はすでにこれを正確に行っています

public partial class CanvasCtl: UserControl,IControl
  {
    public bool Load(string strName, System.Xml.XmlElement ndControl, IField objField, Model objModel)
    {
        m_strName = strName;
        m_Field = objField;

        this.Enabled = true;

        return Init(ref ndControl);

    }
   }

ChekBox クラスと CanvasCtl クラスで同じ問題は、それらを動的に使用していることです。

Control ctlControl = new Control();
DocSys.IControl objControl = default(DocSys.IControl);

 ctlControl = (Control)objTab.CanvasCtl.GetCtl(strName);
 if (blnRetVal)
  {                    
  objControl = (IControl)ctlControl;  
   blnRetVal = objControl.Load(strName, ndControl, objField, objTab.Model);
  }

ライン上

 objControl = (IControl)ctlControl;

それは例外を示しています

Cannot cast 'ctlControl' (which has an actual type of 'System.Windows.Forms.Control') to 'DocSys.IControl'  DocSys.IControl 
于 2012-11-27T05:18:11.307 に答える