掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Moduleをクラスに移行するには (ID:141838)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
はじめまして VB6からVB2005へ移行途中の者です。クラスの使い方で躓いております。 下記3点について御教授お願いします。 ①変数のスコープ&クラスの寿命 下記のようなデジタル出力ボードを制御するクラスを作成しました。 Moduleに関数をまとめたときには問題なかったのですが、クラスのすると 初期化(Init_Dio)のときに取得したhDeviceHandleが実際に使うSet_Dioでは ゼロになってしまいます。同様にポートの出力状態を保持しているOutBufも ゼロになってしまいます。クラスではPublicをつけて宣言しても値が保持されない のでしょうか? Public Class FormMain Private Sub FormMain_Load(省略) Handles MyBase.Load Dim Dio3232 As Dio = New Dio Dio3232.Init_DIO() ← Dioを初期化します End Sub End Class Public Class Dio Public Shared OutBuf(3) As Integer ←Sharedをつけると値は保持される Public Shared hDeviceHandle As Long 'Public hDeviceHandle As Long ←Sharedがないと値が保持されない 'ここで DIOを初期化します Public Sub Init_DIO() hDeviceHandle = IFCDIO_ANY.DioOpen(lpszName, IFCDIO_ANY.FBIDIO_FLAGE) End Sub '実際に使うときにハンドルがゼロになってしまいます Public Sub SetDio(ByVal Data As Integer) OutBuf(PortNo) = OutBuf(PortNo) Or Bit st = IFCDIO_ANY.DioOutputByte(hDeviceHandle, PortNo, mOutBuf(PortNo)) End Sub End Class ②クラス内でのConst宣言 Public Const RANGE1 As Integer = 1 の様にクラス内でPublicをつけてConst宣言を しましたが、他のクラスやフォームで参照できませんでした。同じ内容をModuleに 書くとOKでした。プロジェクト内のすべてのクラス、フォームから参照できる 定数を宣言するにはModuleに書くしかないのでしょうか? ③クラスからフォームに貼り付けたコントロールを使う 下記は、シリアルポートクラスのポートオープンの部分なのですがフォームロード するときにPortOpenメソドを実行しています。PortOpenメソドでは、各種設定をして フォームに貼り付けたコントロールを実行してポートをオープンします。 クラスのメソドから直接フォーム上のコントロールを使うのは良くない・・・と 聞きましたがこのような場合は、クラスの考え方としてどの様にするのが正しい のでしょうか? 測定器を動かす通信部分もTesterクラスに入れてしまった方が良い気もしますし、 汎用性を考えるとフォームに貼り付けたコントロールはクラスから操作しない方が が良い気もします。現在試行錯誤の状態です Public Class Tester Public Sub PortOpen() 'COM1 RS232Cの設定 With FormMain.ComRS232 .PortName = "COM1" 内容省略 End With FormMain.ComRS232.Open() ' 通信ポートを開く End Sub End Class よろしくお願いします
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.