C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

構造体でのform2にform1からもらう

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■85954 / inTopicNo.1)  構造体でのform2にform1からもらう
  
□投稿者/ PJ (1回)-(2017/12/05(Tue) 14:21:48)

分類:[.NET 全般] 

初めまして、今悩んでて助言をください

開発言語Vb.net
windows Forms

’変数の意味、宣言等は割愛

Form1側
  Private Sub Inspection_form()
         Dim inpe As New Inspection_form.Main
        inpe.finishedproduct = finishedproduct
        inpe.Rec = TextBox1.Text
        inpe.pass_2 = pass
        inpe.Log_List = log
        inpe.My_Config = My_system_F
        inpe.My_Use = My_system_U

        check_form = New Inspection_form
        check_form.Show(Inte_use)

Form2側
   Public Structure Main_Recive
        Public finishedproduct As String() 
        Public Rec As String 
        Public Log_List As ListBox 
        Public pass_2 As String() 
        Public My_Config As String 
        Public My_Use As String 
    End Structure


 Public Overloads Sub show(Main_Recive As Main_470)
        
        proda_name.Text = Main_Recive.Rec

        'ボタン
        B = New Button() {Check_bt, stop_bt, Call_bt, end_bt}
        Dim n As String() = File.ReadAllLines(Main_Recive.My_Config & Main_Recive.pass_2(5), enco)
        B(0).Text = n(7)
        B(1).Text = n(8)
        B(2).Text = n(9)
        B(3).Text = n(10)
        'ラベル
        L = New Label() {Cut_timer}
        Dim n2 As String() = File.ReadAllLines(Main_Recive.My_Config & Main_Recive.pass_2(6), enco)
        For i As Integer = 0 To L.Length - 1
            L(i).Text = n2(i)
        Next
        'PDF Load時
        Dim s As Integer = Array.IndexOf(Main_Recive.finishedproduct, proda_name.Text)
        Dim a As String() = Directory.GetFiles(Main_Recive.My_Use & "\" & Main_Recive.finishedproduct(s))
        PDF.LoadFile(a(0))

        show()

1側の変数には配列なり、コントロールなりを設定
showしたときに引数を使いForm2呼び出し時の表示はできたのですが


Form2側でのボタンイベントでの引数が上手くいきません

Private Sub next_Cl_Click(sender As Object, e As EventArgs) Handles next_Cl.Click
        Dim rec As New Main_470
        next_pro(rec)
    End Sub

’クリックイベントでnext_proプロシージャーを呼び出し、構造体の引数付
    Private Sub next_pro(c As Main_470)
        Dim i As Integer = Array.IndexOf(c.finishedproduct, proda_name.Text)
        Dim a As String() = Directory.GetFiles(c.My_Use & c.finishedproduct(i))
        number = number + 1
        PDF.LoadFile(a(number))
    End Sub

クリックイベントで構造体の型をNewしなければ引数として使えないので
インスタンスしますが初期化するので
保持出きていないので、Nothingなります

構造体の使いたが間違っているのか?
最近構造体をやり始めてていまいち理解できてないのか
詳しく教えてください。





引用返信 編集キー/
■85955 / inTopicNo.2)  Re[1]: 構造体でのform2にform1からもらう
□投稿者/ shu (1072回)-(2017/12/05(Tue) 14:38:52)
No85954 (PJ さん) に返信
> Private Sub next_pro(c As Main_470)
いまひとつやりたいことがわかりませんが
構造体を渡すならここは
ByRef c As Main_470
にされた方がよいかと思います。
引用返信 編集キー/
■85956 / inTopicNo.3)  Re[1]: 構造体でのform2にform1からもらう
□投稿者/ Hongliang (577回)-(2017/12/05(Tue) 14:40:34)
結局その構造体の型名はInspection_form.MainなのかMain_ReciveなのかMain_470なのか。
他にもInspection_formなのかForm2なのか、とか。

Showの引数で渡されたMain_470(ということにしよう)を、メンバ変数としておいておけばいいんじゃないでしょうか。
Class Inspection_form
  ' 諸々省略

  Private m_Main_Receive As Main_470

  Public Sub Overloads Show(ByVal Main_Receive As Main_470)
    Me.m_Main_Receive = Main_Receive
    ' 以下、いろいろ
  End Sub

  Private Sub next_Cl_Click(sender As Object, e As EventArgs) Handles next_Cl.Click
    next_pro(Me.m_Main_Recieve)
  End Sub
End Class

ところで、VBにおける構造体(Structure)は、C言語等における構造体とはちょっと違って、
限定的な分野でのみ使用するのが基本です。
ほとんどのケースでは(今回のケースでも)、Classを使用します。

引用返信 編集キー/
■85957 / inTopicNo.4)  Re[2]: 構造体でのform2にform1からもらう
□投稿者/ PJ (2回)-(2017/12/05(Tue) 15:06:25)
No85955 (shu さん) に返信
> ■No85954 (PJ さん) に返信
>> Private Sub next_pro(c As Main_470)

ありがとうございます
変数や型が適当につけているので見直さないといけませんね
ご指摘ありがとうございます

やりたい事はわかりましたので
解決しました

Class化ほどのデータではないので
構造体の作り方を学びたかったのが理由でした

ある程度できていたのですが
肝心な部分ができていないので

まだまだ勉強不足です

ありがとうございました
解決済み
引用返信 編集キー/
■85960 / inTopicNo.5)  Re[3]: 構造体でのform2にform1からもらう
□投稿者/ PANG2 (203回)-(2017/12/05(Tue) 16:18:22)
No85957 (PJ さん) に返信
> Class化ほどのデータではないので
> 構造体の作り方を学びたかったのが理由でした

いいえ。16 バイト以上のデータであれば、クラス化するべきです。

クラスと構造体の使い分け
https://dobon.net/vb/dotnet/beginner/whenusestruct.html


引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ