-PR-
try2005

VB.net(Visual Studio)で現在プログラムの勉強をしています。
現在のスキルとしまして、変数,引数,グローバル変数,サブルーチン等を勉強しました。
残念ながら、他のプログラム言語等は勉強した事がありません。

<目的>
現在1つのアプリケーション内でForm1,Form2,Form3と作り
Form1のText.Boxに入力された値を変数としてボタンを押すと各Formのラベルに
変数を渡し表示させたいと考えております。

<問題点>
しかしプログラムを作っても波下線が出てプログラムのデバックが開始できません。
おそらくどこかがおかしいと思うのですが判りません。

<質問内容>
下記のサンプルの中でおかしいコードや根本からやり直す必要なコードがあれば
ご教授願えますでしょうか?

<サンプル>
-----Form1------
Public Class Form1
Public TextBox1noNakami as strig
Private Sub Button1_click(Byval sender As System.Object,Byval e AS System.EventArgs) Handles Button1_click

TextBox1noNakami = TextBox1.text
Form2.show()
Form3.show()


End Sub
End Class

-----Form2-----
Public Class Form2
Public TextBox1noNakami as Form1

Private Sub Form2_Losd(Byval sender As System.Object,Byval e AS System.EventArgs) Handles MyBase.Load
label1.text = TextBox1noNakami
End Sub
End Class


-----Form3-----

Public Class Form3
Public TextBox1noNakami as Form1

Private Sub Form3_Losd(Byval sender As System.Object,Byval e AS System.EventArgs) Handles MyBase.Load
label2.text = TextBox1noNakami
End Sub
End Class
  • 回答数4
  • 気になる数0
  • Aみんなの回答(全4件)

    質問者が選んだベストアンサー

    • 2005-12-11 15:12:10
    • 回答No.4
    VB2005? という事はVisualBasic2005のBetaでも使ってるって事かなぁ?

    まず、VBとななんぞやをおさらいしましょう。
    VB6.0 1998年 最後の「VB」。私があなたのプログラムから受けた印象はこちら。
    VB.NET1.0 2002年 最初の「VB.NET」。ここで大幅に言語仕様というか言語そのものが変わった。
    VB.NET1.1 2003年
    VB.NET2.0 2005年 これがおそらくあなたが使っているものだ。

    > これはVisualBasic的な記述では駄目なのでしょうか?
     年鑑から分かるように、あなたが使っているのはVB.NET2.0で、それに対してVB6.0的な書き方をしているのがまずいわけだ。名前が似ているのが悪いのだが、今後はVB.NET的な書き方をしてあげましょう。

     試してないのであれなのだが、改訂版1って・・・・動く? エラーは出ないと思うのだが、何からも参照されていないインスタンスは危険よ。

     どういう事かというと、
    ・f2っていう変数があって、Form2のインスタンスAを参照しているよね。
    ・f2っていう変数は、Private Sub Button1_clickが終了したら消えるよね。
    →インスタンスAを参照する変数が無くなる(危険!)

     これは、「インスタンスが作成されるのはNewされた時だが、破棄されるタイミングは分からない(決定できない)」という事に起因する問題だ。

    <改訂版2> Form2のみ
    -----Form1------
    Public Class Form1
    Private f2 As Form2 = Nothing ' クラス変数にする事で、Form1が動いている間は変数が消えない
    Private Sub Button1_click(Byval sender As System.Object,Byval e AS System.EventArgs) Handles Button1_click
      If Not f2 Is Nothing Then   ' あれば閉じる
        f2.close        ' 実際使う時はTryで囲むべし
      End If
      f2 = New Form2
      f2.Label1.Text = TextBox1.Text
      f2.Show()
    End Sub
    End Class

    -----Form2-----
    Public Class Form2
    End Class
    補足コメント
    またまたの解答ありがとうございます。
    また補足が遅くなり申し訳ございません。
    >VB2005?という事はVisualBasic2005のBetaでも使ってるって事かなぁ?

    はい、本に付録で付いていたDVDを使ってインストールしました。

    VBに関する年鑑は非常にありがたいです。どの本をみても結構VB6からの変更点は....と書いてあり、VB.netとの違いが今ひとつ判っておりませんでした。

    >改訂版1って・・・・動く?

    はい、今のところ[Hello World!]や[スロットマシーン](Rndをつかう奴)
    [電卓]等は作れました、正常に動くかどうかは人に見てもらっていないので判りませんが....

    >エラーは出ないと思うのだが、何からも参照されていないインスタンスは危険よ。
    上記の教えて頂いた事を今から実行してみます。
    今のままでは???な感じですが、ひとつひとつ勉強して行こうと思います。

    ありがとうございました。
    投稿日時 - 2005-12-12 09:03:50
    お礼コメント
    今回の回答は本当に勉強になりました、私のつたない質問に
    ご丁寧に教えて頂き、ありがとうございました。
    投稿日時 - 2005-12-26 08:53:04
    • ありがとう数0

    その他の回答 (全3件)

    • 2005-12-08 15:16:03
    • 回答No.1
     申し訳ないが余りにもつっこみどころ満載で何をどうしようとかそんなレベルではない。当方もVB.NET暦1ヶ月ほどなので、的外れな添削があればご勘弁。 > Public Class Form1 > Public TextBox1noNakami as strig > Private Sub Button1_click(Byval sender As System.Object,B ...続きを読む
     申し訳ないが余りにもつっこみどころ満載で何をどうしようとかそんなレベルではない。当方もVB.NET暦1ヶ月ほどなので、的外れな添削があればご勘弁。

    > Public Class Form1
    > Public TextBox1noNakami as strig
    > Private Sub Button1_click(Byval sender As System.Object,Byval e AS System.EventArgs) Handles Button1_click
    >
    > TextBox1noNakami = TextBox1.text
    > Form2.show()
    ↑VBと違い、VB.NETではこの書き方はできない。詳細は後述。
    > Form3.show()
    ↑同上
    >
    > End Sub
    > End Class
    >
    > -----Form2-----
    > Public Class Form2
    > Public TextBox1noNakami as Form1
    ↑意味不明。これではTextBox1noNakamiはForm1クラスのインスタンスになる。
    >
    > Private Sub Form2_Losd(Byval sender As System.Object,Byval e AS System.EventArgs) Handles MyBase.Load
    > label1.text = TextBox1noNakami
    label1.text(string)に対して TextBox1noNakami(Form1)は型がぜんぜん違うので代入できない。しかもTextBox1noNakamiは今Nothingだ。
    > End Sub
    > End Class
    >
    > -----Form3-----
    Form2と同じ。

     他の言語はやった事ないという事だが、余りにもVisualBasic的な記述ばかりだ。特にForm2.Show。VB6でForm2.Showが可能なのは、裏でVBが
    Global Form2 As New Form2
    という、フォーム名と同名のインスタンスを作成するからだ。これを暗黙のインスタンスと言う。VB.NETでは、この機能は撤廃されている。

     さて、修正案だが・・・・
    案1(Form間に親子関係が無い場合):アプリケーショングローバルな変数を確保する。VB6でいう標準モジュールのPublic変数。→Public Module Common Public TextBox1noNakami As String End Module
    案2(完全VB6ライク):→Public Module Common Public Form1 As New Form1 ... End Module
    案3(Form間に親子関係):→簡潔に説明できないので割愛

     とにかくもう少し基本からやりましょう。先にオブジェクト指向プログラミングとは何ぞやをやらないと今のままでは難しいです。
    補足コメント
    >他の言語はやった事ないという事だが、余りにもVisualBasic的な記述ばかりだ。
    >特にForm2.Show。VB6でForm2.Showが可能なのは、裏でVBがGlobal Form2 As New Form2という、
    >フォーム名と同名のインスタンスを作成するからだ。
    >これを暗黙のインスタンスと言う。
    >VB.NETでは、この機能は撤廃されている。

    書き忘れましたが、私のいま使っているアプリケーションは
    -----------------------------------------
    Microsoft Visual Basic 2005
    Visual Basic -> Windwsアプリケーション
    ------------------------------------------
    です。
    これはVisualBasic的な記述では駄目なのでしょうか?

    >さて、修正案だが・・・・
    >案1(Form間に親子関係が無い場合):アプリケーショングローバルな変数を確保する。

    申し訳ございませんが親子関係の意味が判りかねます。
    私のイメージで言いますとアプリケーションを立ち上げるとForm1が立ち上がり
    Form1内にあるボタンを押すとForm2とForm3が立ち上がり、
    Form1のTextBoxに入力された数値を変数化しForm2とForm3に渡し表示させたいです。

    >VB6でいう標準モジュールのPublic変数。→Public Module Common Public TextBox1noNakami As String End Module
    >案2(完全VB6ライク):→Public Module Common Public Form1 As New Form1 ... End Module
    >案3(Form間に親子関係):→簡潔に説明できないので割愛

    >とにかくもう少し基本からやりましょう。
    >先にオブジェクト指向プログラミングとは何ぞやをやらないと今のままでは難しいです。

    基本的に独学なので、基本がどれで、今私は応用編をやっている等
    まったく判っていません。
    本をみてもHPをみてもオブジェクト指向については抽象的な事しか書かれていない事が多く
    まずはできる事からやろうと思っています。

    もしプログラムの基礎やオブジェクト指向に関する良い本やHPがあれば教えてください。
    解答ありがとうございました。
    投稿日時 - 2005-12-08 17:06:45
    • ありがとう数0
    • 2005-12-08 15:41:03
    • 回答No.2
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim f As Form2 = New Form2 f.Label1.Text = TextBox1.Text f.Show() En ...続きを読む
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim f As Form2 = New Form2
    f.Label1.Text = TextBox1.Text
    f.Show()
    End Sub
    'で、Form2のラベルに、TextBox1の内容をセットして表示できるけど…
    補足コメント
    回答して頂きまして、まことにありがとうございます。
    教えて頂いたのを少しいじりましたがサックっと作れてしまいました。
    下記に私なりのコメントを付けましたので、おかしい解釈をしていれば
    お時間のある時で結構ですので教えてください。

    <改訂版1>
    -----Form1------
    Public Class Form1
    Public TextBox1noNakami as strig
    Private Sub Button1_click(Byval sender As System.Object,Byval e AS System.EventArgs) Handles Button1_click

    Dim f2 As Form2 = New Form2   '[変数]f2はForm2の事(Form2はNEWで新たに作成!)
      f2.Label1.Text = TextBox1.Text ’Form1のTextBox1.Textの値をf2.Label1.Text(Form2)に渡す。
      f2.Show()            ’f2(Form2)をshow(画面に出す)
    End Sub

      Dim f3 As Form3 = New Form3   '[変数]f3はForm3の事(Form3はNEWで新たに作成!)
      f3.Label1.Text = TextBox1.Text ’Form1のTextBox1.Textの値をf3.Label1.Text(Form3)に渡す。
      f3.Show()            ’f3(Form3)をshow(画面に出す)
     End Sub

    End Class

    -----Form2-----
    Public Class Form2
    End Class

    -----Form3-----
    Public Class Form3
    End Class
    投稿日時 - 2005-12-08 16:45:02
    • ありがとう数0
    • 2005-12-08 18:59:19
    • 回答No.3
    >私なりのコメント 別におかしくないですよ。 ただ、注意すべき点としては、 (#1の方も指摘されている様に) 変数の(f2とかf3の)寿命ということですね。 それをプログラム上どうするかということを考えておかねばなりません (どうするかについては、質問文のプログラムからは、なんとも言えません) ...続きを読む
    >私なりのコメント
    別におかしくないですよ。
    ただ、注意すべき点としては、
    (#1の方も指摘されている様に)
    変数の(f2とかf3の)寿命ということですね。
    それをプログラム上どうするかということを考えておかねばなりません
    (どうするかについては、質問文のプログラムからは、なんとも言えません)
    補足コメント
    >ただ、注意すべき点としては、
    >(#1の方も指摘されている様に)
    >変数の(f2とかf3の)寿命ということですね

    解答ありがとうございます。補足が遅くなり申し訳ございません。

    まずはForm間での値を渡す事をしたかったので寿命?の事は考えていませんでした。
    この寿命という言葉もいろんな所で書かれていますが、
    要するに変数に覚えこました情報が消える(無効になる?)までってことですよね。
    投稿日時 - 2005-12-12 09:02:30
    お礼コメント
    教えて頂いた変数の寿命について現在勉強中です。
    ご解答ありがとうございました。
    投稿日時 - 2005-12-26 08:51:31
    • ありがとう数0
    • 回答数4
    • 気になる数0
    • ありがとう数2
    • ありがとう
    • なるほど、役に立ったなど
      感じた思いを「ありがとう」で
      伝えてください
    • 質問する
    • 知りたいこと、悩んでいることを
      投稿してみましょう
    こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
    このQ&Aにはまだコメントがありません。
    あなたの思ったこと、知っていることをここにコメントしてみましょう。

    関連するQ&A

    その他の関連するQ&Aをキーワードで探す

    別のキーワードで再検索する
    -PR-
    -PR-
    -PR-

    特集


    成功のポイントとは?M&Aで経営の不安を解決!

    -PR-

    ピックアップ

    -PR-
    ページ先頭へ