投稿者 イヨ  (社会人) 投稿日時 2021/1/13 17:19:51
魔界の仮面弁士 様
お世話になっております。

>しかし現在のコードを見る限りでは、そういう実装になっているわけではなく、
>呼び出し元と同一スレッドで動作するクラスと思って良いのですよね?
自分はVBま初心者なのでよくわかりませんがソリューションエクスプローラーウインドウをみてみると

BarcodeReader.vb
Public Class BarcodeReader  
Public Sub DataReceived()
   
Form2.vb
Public Class Form2
Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
とありました。


>New するということは、そこで新たに Form2 画面をもう一枚生成するということを意味します。
>しかも Visible = True や Show が無いので、非表示のフォームということになり、
>ここで得られる Text の値は、デザイン時の初期値になってしまうでしょう。

なるほど!初期値になってしまうんですね。どうりで空白なわけです。


>ところで、g_Data というのは何でしょうか?
>BarcodeReader のインスタンスフィールドなのか、Form2 の公開プロパティなのか、
>あるいはそれらの Shared メンバーであるのか、それとも Module で定義されたグローバル変数なのか…。

いまバーコードをスキャナーで読み取るプログラムがあって
自分は手打ちで読み込ませるものに書き直したりしています。
g_Dataは読み取った文字を格納する変数です。

自分が書いたのもではないのですが
Public Class BarcodeReaderの下に
    ''' <summary>受信データ</summary>
    Private Shared g_Data As String = ""
とかいてありました。




>質問文中で大文字小文字の使い分けが混在しているのは、意図的なものでしょうか?
>ひとまず、g_Data と G_Data は同じ物のことで、
>TextBox1.Text と textBox1.text も同じものだと仮定して回答します。
すいません。まぎらわしくて。同じです。

>上記の場合、変数の型もインスタンスの型も BarcodeReader 型であり、
>ClsHuman型にはなっていません。コメントの通り ClsHuman 型だというのなら、
>Dim human1 As New BarcodeReaderではなく、
>Dim human1 As New ClsHuman()
>Dim human1 As ClsHuman = New BarcodeReader()
>Dim human1 As BarcodeReader = New ClsHuman()などであるべきでしょう。

これは自分のコメントが間違っていました。
正しくはBarcodeReader 型です。申し訳ないです。

>BarcodeReader クラスが自作クラスなのか外部クラスなのか分かりませんが、
>メソッド呼び出し時点の固定値が得られれば良いだけであれば、下記で十分だと思います。
書いていただきましたコードに置き換えたところ
違う箇所がエラーになってしまいました。
コードは下記になります。
'データ受信ハンドラ設定
AddHandler g_SerialPort.DataReceived, AddressOf DataReceived
のDataReceived部分です。

どうやら Public Sub DataReceived()→を Public Sub DataReceived(arg As String)としたらそうなってしまいました。
イベントハンドラーになにか影響があったりするのでしょうか・・
右も左もわからず、、、言葉足らずになってしまいすいません。
沢山案を見せて頂き、ありがとうございます。
渡し方いろいろあるのですね。
対象のオブジェクトやメゾッドの引数で渡したり、、理解できるように勉強しようとおもいます。