- - PR -
OCXコントロールのインスタンス化について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-05-16 11:13
いつも参考にさせて頂いております。
VB6のOCXコントロールをVB.NET2003で使用しようと思っています。 そのOCXコントロールとは、SATO社製のMultiLABELISTのOCXコントロールです。 クラスを作成し、その中でNewでインスタンス化しても InvalidActiveXStateExceptionが発生します。 この説明を見ると、インスタンス化がうまくいっていないようです。 ただし、画面に貼り付けたコントロールを使用すると問題なく動きます。 インスタンス化は以下の様に行っています。 Private WithEvents MultiLblCtrlObj As New AxMLMECONTROLLib.AxMLmeControl その後、何かしらのメソッド、プロパティにアクセスすると、上記例外が発生します。 OCXコントロールのクラス内でのインスタンス化方法をご教授お願いします。 | ||||
|
投稿日時: 2006-05-16 11:29
その SATO 社さんは「動作保証」をしているのでしょうか? 不都合があっても、何もおかしくはありません。 たとえば、同じ COM である MSFlexGrid あたりでは不具合が生じます。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-05-16 11:42
そういうもんです。 本来、「フォームに貼り付けないと動作しない(くてもよい)」のが OCX というものです。 例外的に new しただけで動くものもありますが、それはそのコントロールが「たまたまそういう造り」をしているからです。 フォームを表示したくないとしても、非表示のフォーなどを用意しないと動かないものは動かないです。 ASP.NET 等、バックエンドでの利用を考えているならあきらめて代替案を考えた方がいいです。 | ||||
|
投稿日時: 2006-05-16 11:43
じゃんぬねっとさん、ご回答ありがとうございます。
SATO社のページには「動作保証」については書かれていませんが、 VB.NETでのサンプル等が置かれています。 画面にこのOCXコントロールを貼り付けた場合は問題なく使用できます。 ということは、画面の自動生成されたソースをマネすれば良いのでしょうか? 以下、MLmeControlという名前で画面に貼り付けた時のソースです。 しかし、新しいクラスの場合、resources変数はどうしたら良いでしょうか? Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(SamplePrintML)) Me.MLmeControl = New AxMLMECONTROLLib.AxMLmeControl CType(Me.MLmeControl, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' 'MLmeControl ' Me.MLmeControl.Enabled = True Me.MLmeControl.Location = New System.Drawing.Point(180, 92) Me.MLmeControl.Name = "MLmeControl" Me.MLmeControl.OcxState = CType(resources.GetObject("MLmeControl.OcxState"), System.Windows.Forms.AxHost.State) Me.MLmeControl.Size = New System.Drawing.Size(28, 28) Me.MLmeControl.TabIndex = 0 よろしくお願い致します。 | ||||
|
投稿日時: 2006-05-16 11:45
渋木宏明(ひどり)さん、ご回答ありがとうございます。
画面に貼り付けないと駄目なコントロールもあるのですね。 諦めるしかなさそうですね。 ありがとうございました。 |
1