- 締切済み
VB2010で簡単なプログラムが動かないのです・・
説明が下手なのでそのままプログラムを書きます。 ListOfficeからShowDialogでDForm1を開いています。 さらにDForm1からShowDialogでStart_Formを開いて閉じるボタンで以下の命令と実行したいのですが・・・・ ListOffice.Text = Me.TextBox1.Text →OKで動きました DForm1.Text = Me.TextBox1.Text →NG 動きません・・・ DForm1でその他にもTextboxでやってみましたが、それでも動かないのです・・・・ 原因不明です・・・・ 以前、ほかのプログラム作成の時は動いたのですが・・・ DForm1.Text = Me.TextBox1.Textの下にMsgbox(DForm1.Text)を入れて確認してみたらMe.TextBox1.Textの文字がきちんと表示されました。 ご協力お願い致しますm(__)m Public Class Start_Form Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click DForm1.Text = Me.TextBox1.Text ListOffice.Text = Me.TextBox1.Text Me.Close() End Sub End Class
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
こんばんは 先ほどの疑問がわかったかもしれませんので、投稿しました。 ListOffice、DForm1、Start_Formは全てフォームですね、フォームの名前を変更するプログラムでしょうか? 上記の仮定で回答してみます。 1.コードの先頭部分は、「Public Class DForm1」、「Public Class ListOffice」、「Public Class Start_Form」で全て Classが付いてます。 つまりこれらは全てClassです。 2.Classである以上、Classの基本構文が当てはまります。 3.ClassからClassに値を渡す場合は、プロパティかイベントを使用します。 4.フォームの文字列等を変更する場合は基本的に、再描画します。 5.再描画の一番簡単な方法は1度Closeします。 6.単にCloseすると終了してしまいますので、画像のように「プロジェクト」→「プロパティ」→「シャットダウンモード」で「最後のフォームが閉じる時」に設定します。 サンプルを掲載します。 Class ListOffice側 Public Class ListOffice Public _st As String 'Class Start_Formから受け取った値 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim d1 As New Dialog1 'Dialog1のインスタンス d1.Show() Me.Close() End Sub 'クラス間の値の受け渡しは、プロパティかイベントで渡します Public Property st() As String Get Return _st End Get Set(value As String) _st = value Me.Text = _st 'フォーム名に表示 End Set End Property End Class Class DForm1側 Public Class DForm1 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim d1 As New Dialog2 'Dialog2インスタンス d1.Show() Me.Close() End Sub '文字列をClass Start_Formから受け取ります。あまりよくない例 Public Sub st(ByVal name As String) Me.Text = name 'フォーム名に表示 End Sub End Class Class Start_Form側 Public Class Start_Form Private Sub Button1_Click() Handles Button1.Click Dim df As New DForm1 'DForm1のインスタンス Dim lis As New ListOffice 'ListOfficeのインスタンス Dim dfname As String 'TextBox1に入力された値 dfname = TextBox1.Text df.st(dfname) 'Class DForm1に値を渡す lis.st = dfname 'Class ListOfficeのプロパティに値を代入 lis.Show() df.Show() Me.Close() End Sub End Class フォームを閉じるタイミング等は調整してくださ。 かわいそうなのでイベントで値を渡すサンプルも掲載しておきます。 フォームが2個でForm1にボタン1個、Form2はボタン1個、テキストボックスを1個貼り付けてます。 「最後のフォームが閉じる時」です。 Public Class Form1 Dim WithEvents dost As New Form2 Private Sub f1() Handles MyBase.Shown dost.namest() End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim f2 As New Form2 f2.Show() Me.Close() End Sub Private Sub do_name(ByVal sender As Object, ByVal e As String) Handles dost.dostname Me.Text = e End Sub End Class Public Class Form2 Public Event dostname(ByVal sender As Object, ByVal e As String) Shared st As String Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim f1 As New Form1 st = TextBox1.Text f1.Show() Me.Close() End Sub Public Sub namest() RaiseEvent dostname(Me, st) End Sub End Class VBの場合、他の言語(C#、Java,その他、とくにJava)と同じように、オブジェクト指向ですので、クラスを作成してプログラムしていきます。 例 Class Form1は司令官 指令をだすだけ Class dodataはデータの担当者 司令官の指示によりデータを集めて、各クラスに配る Class dofileはファイル、フォルダー専門の担当者 Class grahfは画像の描画専門 Class startupレジストリを扱う担当者 見たいな感じです。 頑張ってください、わからないときはまた質問してね。 Class
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
こんにちは 大変申し訳ありません、私の読解力不足で言葉の意味が掴めていません。 少し教えていただけないでしょうか >ListOfficeから 上記の名前から推測すると、マイクロソフトのオフィスの関係でしょうか? それとも、通常のコントロールの名前を変更しているのでしょうか? コントロールであれば、コントロール名も教えてください。 >DForm1でその他にもTextboxでやってみましたが、それでも動かないのです・・・・ このときに表示される、エラーの内容はわかりますか? Me.Close()が書かれているところから、エラーの内容を推測すると、「1度破棄されたオブジェクトは~~~~できません」でしょうか? >DForm1 「Form1」の名前を変更したものですか? >Start_Form 「プロジェクト」→「プロパティ」→「スタートアップフォーム(O)」でStart_Formを指定してますか? お手数おかけします。出来る範囲で結構ですので、教えて頂けませんか。 宜しくお願いします。