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

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

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

変数について

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

■91275 / inTopicNo.1)  変数について
  
□投稿者/ まどか (1回)-(2019/06/10(Mon) 14:42:34)

分類:[.NET 全般] 

VB.netで学習をしています。

フォーム1とフォーム2を用意し、
フォーム2で変数をパブリック宣言して、
フォーム1でその変数に値を代入してフォーム2でその値を使いたいのですが、上手くいきませんでした。

標準モジュールで宣言すると上手くいったのですが、出来ればフォーム2で宣言して使いたいのですがどうすればよいのでしょうか?


<フォーム1>


atai = "○○" ←ここで代入



<フォーム2>

Public atai As String

-ロードイベント-
TextBox1.Text = atai


このように今は書いています。

よろしくお願いします。
引用返信 編集キー/
■91277 / inTopicNo.2)  Re[1]: 変数について
□投稿者/ まどか (2回)-(2019/06/10(Mon) 14:55:48)
No91275 (まどか さん) に返信
> VB.netで学習をしています。
>
> フォーム1とフォーム2を用意し、
> フォーム2で変数をパブリック宣言して、
> フォーム1でその変数に値を代入してフォーム2でその値を使いたいのですが、上手くいきませんでした。
>
> 標準モジュールで宣言すると上手くいったのですが、出来ればフォーム2で宣言して使いたいのですがどうすればよいのでしょうか?
>
>
> <フォーム1>
>
>
> atai = "○○" ←ここで代入
>
>

>
> <フォーム2>
>
> Public atai As String
>
> -ロードイベント-
> TextBox1.Text = atai
>
>
> このように今は書いています。
>
> よろしくお願いします。
解決済み
引用返信 編集キー/
■91278 / inTopicNo.3)  Re[2]: 変数について
□投稿者/ WebSurfer (1842回)-(2019/06/10(Mon) 15:01:55)
No91277 (まどか さん) に返信

Form1 において Form2 を初期化して開くのであれば、Form2 のコンストラクタに
String を引数に取るオーバーロードを追加して、そのコンストラクタを使って Form2
を初期化するときに引数に atai を渡してやってはいかがですか?
引用返信 編集キー/
■91279 / inTopicNo.4)  Re[1]: 変数について
□投稿者/ 魔界の仮面弁士 (2201回)-(2019/06/10(Mon) 15:16:19)
No91275 (まどか さん) に返信
> フォーム1とフォーム2を用意し、
> フォーム2で変数をパブリック宣言して、
> フォーム1でその変数に値を代入してフォーム2でその値を使いたいのですが、上手くいきませんでした。

他のフォームの Public メンバーにアクセスするためには、
「フォーム変数.Atai = 」のようにして、
どのフォームインスタンスの Atai なのかを指定せねばなりません。



Public Class Form2
  Public Atai As String
  Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    '自分自身のメンバーにアクセスする場合は、
    '「Atai = 」でも「Me.Atai = 」でも構わない
    Me.Atai = Now.ToString("HH:mm:ss.fff")
    Me.Text = Atai
  End Sub
End Class



Public Class Form1
  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'Form2 から Atai を読み取る
    Button1.Text = "既定の Form2 インスタンスから読み取り"
    Button2.Text = "全ての Form2 インスタンスから読み取り"

    'Form2 を起動する
    Button3.Text = "既定の Form2 インスタンスから表示(一つのみ)"
    Button4.Text = "Form2 インスタンスを明示的に作成して表示(幾つでも)"

    'Button3 を 2 回押したことにする
    Button3.PerformClick()
    Button3.PerformClick()
  End Sub

  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    MsgBox("既定の Form2 インスタンスの Atai =" & My.Forms.Form2.Atai)
  End Sub

  Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim title As String = "Form2 の数:" & Application.OpenForms().OfType(Of Form2)().Count
    For Each f2 In Application.OpenForms().OfType(Of Form2)()
      MsgBox(f2.Text & "の Atai =" & f2.Atai, MsgBoxStyle.Information, title)
    Next
  End Sub

  'このボタンを何度押しても、Form2 は一つだけしか表示されない
  Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    '既定のフォームインスタンスを使う場合(何度ボタンを押してもフォームは1つ)
    If Not Form2.Visible Then
      Form2.Show(Me)
    End If
    'MsgBox("既定の Form2 インスタンスの Atai =" & Form2.Atai)
  End Sub

  'このボタンを押すたびに、表示される Form2 が増えていく
  Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    'フォームのインスタンスを明示的に作成する場合
    Dim f As New Form2()
    f.Show(Me)
    'MsgBox("今起動したフォームの Atai =" & f.Atai)
  End Sub
End Class
引用返信 編集キー/

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


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

このトピックに書きこむ