• 締切済み

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

みんなの回答

回答No.2

こんばんは 先ほどの疑問がわかったかもしれませんので、投稿しました。 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

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

こんにちは 大変申し訳ありません、私の読解力不足で言葉の意味が掴めていません。 少し教えていただけないでしょうか >ListOfficeから 上記の名前から推測すると、マイクロソフトのオフィスの関係でしょうか? それとも、通常のコントロールの名前を変更しているのでしょうか? コントロールであれば、コントロール名も教えてください。 >DForm1でその他にもTextboxでやってみましたが、それでも動かないのです・・・・ このときに表示される、エラーの内容はわかりますか? Me.Close()が書かれているところから、エラーの内容を推測すると、「1度破棄されたオブジェクトは~~~~できません」でしょうか? >DForm1 「Form1」の名前を変更したものですか? >Start_Form 「プロジェクト」→「プロパティ」→「スタートアップフォーム(O)」でStart_Formを指定してますか? お手数おかけします。出来る範囲で結構ですので、教えて頂けませんか。 宜しくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • vbのsavefiledialogについて

    vbで、テキストボックスに、文字を入力し、ボタン2をクリックすると、ユーザーが指定したところに、指定した名前で、txt形式、html形式、doc形式(このうち、txtと、htmlは必須。)で保存するプログラムを作りたいと思っております。 サイトを見てみますが、なかなかよいものが見つかりません。どなたか教えてください。 書きかけのプログラムと、フォーム図を載せておきます。 また、変更した方がよければ、そちらもおしえてください。 Public Class Form1 Dim texta As String Dim a Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Button1.Text = "リセット" Button2.Text = "保存" texta = TextBox1.Text End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged texta = TextBox1.Text End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = "" End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click a = DialogResult SaveFileDialog1.OverwritePrompt = True SaveFileDialog1.FileName = "" SaveFileDialog1.Filter = "テキストファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*" a = SaveFileDialog1.ShowDialog If a = Windows.Forms.DialogResult.OK Then Label1.Text = IO.Path.GetDirectoryName(SaveFileDialog1.FileName) Label2.Text = IO.Path.GetFileName(SaveFileDialog1.FileName) Else Label1.Text = "キャンセルされました。" Label2.Text = "" End If End Sub End Class

  • 順列のプログラムについて(VB)

    下記が、組み合わせを求めるプログラムです。 これのどこを変更すれば、順列を列挙するプログラムになりますか(ただし、重複順列でない。例、5P2=5*4=20通り)?教えていただけませんか? Public Class Form1 Dim w0, w1, count As String Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "コンビネーションサーチ" Label1.Text = "個の中から" Label2.Text = "個とる組リスト" Button1.Text = "計算" TextBox1.Text = "6" TextBox2.Text = "3" TextBox3.Text = "" TextBox3.ScrollBars = ScrollBars.Vertical count = 0 End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim n, m As Integer n = TextBox1.Text m = TextBox2.Text w1 = " }" w0 = "{ " TextBox3.Text = "" count = 0 combisearch(1, n, m) MsgBox("組み合わせ個数は、" & count & "個です。") End Sub Sub combisearch(ByVal st, ByVal ed, ByVal depth) Dim i, temp If depth - 1 < 1 Then For i = st To ed TextBox3.Text &= w0 & i & w1 & vbCrLf count += 1 Next Else For i = st To ed temp = w0 w0 &= i & " " combisearch(i + 1, ed, depth - 1) w0 = temp Next End If End Sub End Class

  • VB2008 Form間の計算について

    VB勉強中のものです。 次のようにプログラムを作成したいですので よろしくお願いします。 要望: 1 From2のTextbox1 or Textbox2に"2001/05/05"ような書式で日付を入力 2 RadioButton1かRadioButton2の選択して 3 Form1の「DateTimePicker」を利用して、日数の差を計算し、 Form2の label3に結果を表示させる 例: From2のTextbox1 = 2001/01/01 Form1の「DateTimePicker」 = 2002/01/01 RadioButton1を選択したら、 Label3内に " 誕生日から生まれて365日となりました" という結果が出れば、問題がないです。 ------------ Form 1 --------------------- Public Class Form1 Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click 'labelをクリックして、form2を開く Dim frmTmp As New Form2 frmTmp.ShowDialog() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim intdate As Integer intdate = DateDiff(DateInterval.Day, DateTimePicker1.Value, Now) Label1.Text = "誕生日から生まれて" & intdate & "日となりました" End Sub End Class -------------------------------------------- -------------Form 2 ------------------------ Public Class Form2 Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged If RadioButton1.Checked = True Then Label3.Text = "*******わからない部分*******" End If End Sub End Class ----------------------------------------------------- 以上

  • VB初心者です。コードの書き方が分かりません。

    VB初心者です。 VBで(zのn乗)-(xのn乗+yのn乗)の計算が出来るようにしたいのですが、答えが必ず-1になってしまいます。 Option Explicit On Public Class Form1 Dim x As Long Dim y As Long Dim z As Long Dim n As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub Private Sub TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox4.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) End Sub End Class 正しいコードの書き方を教えて下さい。 また特定の答えのときにメッセージを表示したいのですが、どうすればいいですか?

  • Form間のデータ渡しについて

    申し訳ありません。VB.NET初心者です。 Form1から、ボタンAをクリックするとForm2がオープンします。 Form1から、ボタンBをクリックするとForm3がオープンします。 Form1では、Form2またはForm3で設定した値をそれぞれ演算に使おうとしています。 MicrosoftのHPからパクってForm1 - Form2間のデータの引渡しを行うことはできたの ですが、新規でForm3を作成して、Form1 - Form3間のデータの引渡しを行おうとする とForm3の立ち上がり時に "NullReferenceException はハンドルされませんでした"となり、 困ってしまいました。 使われている方から見ると簡単かもしれず 申し訳ありませんが、どなたか教えていただけないでしょうか。 ==================== Form1.vb ======================= Form1には、Label1、Label2、Button1、Button2があります。 Public Class Form1 Inherits System.Windows.Forms.Form Private m_form2 As Form2 Private m_form3 As Form3 Public Property LabelText() As String Get Return Label1.Text End Get Set(ByVal Value As String) Label1.Text = Value End Set End Property Public Property LabelText2() As String Get Return Label2.Text End Get Set(ByVal Value As String) Label2.Text = Value End Set End Property Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ScaleYokusou.Click m_form2 = New Form2(Me) m_form2.ShowDialog() m_form2.Dispose() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ScaleHikito.Click m_form3 = New Form3() m_form3.ShowDialog() m_form3.Dispose() End Sub End Class ==================== Form2.vb ======================= Form2には、TextBox1、Button1があります。 Public Class Form2 Inherits System.Windows.Forms.Form Private m_form1 As Form1 Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged If m_form1 Is Nothing = False Then m_form1.LabelText = Me.TextBox1.Text End If End Sub Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If m_form1 Is Nothing = False Then Me.TextBox1.Text = m_form1.LabelText End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub End Class ==================== Form3.vb ======================= Form3には、TextBox1、Button1があります。 Public Class Form3 Inherits System.Windows.Forms.Form Private m_form1 As Form1 Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged If m_form1 Is Nothing = False Then m_form1.LabelText2 = Me.TextBox1.Text End If End Sub Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.TextBox1.Text = m_form1.LabelText2 End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub End Class

  • 簡単なプログラムにまとめる方法

    前回、同じようなプログラムを簡単にまとめる方法を教えて頂いたのですが新しい事で困ってしまいました。 説明が非常にへたくそなので、プログラムをそのまま書きます・・・・ スイマセン Private Sub TextBox1_1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1_1.GotFocus Me.TextBoxNum.Text = "1" End Sub Private Sub TextBox2_1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox2_1.GotFocus Me.TextBoxNum.Text = "2" End Sub Private Sub TextBox3_1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox3_1.GotFocus Me.TextBoxNum.Text = "3" End Sub 上記のプログラム、TextBox○○○_1.KeyPressの○○○の部分が1から100まであるのですが、あまりにも行数が多くなって長くなるので、以下のプログラムで纏めたのですが、 Me.TextBoxNum.Text = "○○○" にフォーカスされたTextBox○○○_1の○○○を入れる方法はありますか? Private Sub TextBox1_1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1_1.GotFocus,TextBox2_1.GotFocus,TextBox3_1.GotFocus Me.TextBoxNum.Text = "○○○" End Sub 説明が下手くそでスイマセン、ほかに新しい方法でも有ればお願いします よろしくお願いしますm(__)m

  • VBで倍数を出したい

    VBで倍数を出したい よろしくお願いします。 おそらく基本なんだと思うのですが、さっぱりわかりません。 TextBox Label Buttonと並んでいて、 TextBoxに入った整数に対し、 Buttonを1度押すたびに、 Labelに倍数が表記されていく、 という趣旨なのですが。 まず、前段階として下記を作らされました。 Public Class Form1 Dim i As Integer Dim m As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click i = TextBox1.Text lblmessage.Text = i + m m = lblmessage.Text End Sub End Class このように、labelの数字がどんどん変わっていくのはできたのですが、問題は、 Text…10 Label…10    20    30    40    50    60    70    80    90    100 となり、しかも一度に出るのではなく、Buttonひと押しにつき一つの解が出ね 次の一押しで改行され解が出る。 かつ、100で打ち止めにすること…だそうです。 いちおうめちゃくちゃですが、みんな風に作りました。 Public Class Form1 Dim a As Integer Dim b As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim b As Integer = 10 a = TextBox1.Text lblMessage.Text = a & ControlChars.CrLf & a + b End Sub End Class どうかヒントだけでもお願いします。

  • クラス間(Form間?)で使える変数の設定方法(VB.NET)

    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

  • sub プロシージャを呼び出すにはどうればいいんですか?in vb 2005

    恐れ入ります。 vb2005にて、sub プロシージャをよびだしたいんですけどどうすればよろしいでしょうか?教えて下さい。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click load ike 'vb6ではこれでいけたのに・・・ End Sub Public Sub ike() textbox1.text="イケメン" end sub End Class

  • VB添削

    このプログラムは 例えば3 3 4とテキストボックスに数字が打ち込まれると 3×3行列が4個分 のテキストボックスがでてきます。 ここに数字を打ち込んでいき、ボタン2を押すと3×3のテキスト トボックスが出てくると同時に足し算した結果が出てくるようにしたいです。 以下のプログラムはできたところまで作成しています。 どこを直せばよいのでしょうか。 Public Class Form1 Private number As Integer Private rows As Integer Private columns As Integer Private Sub Form11_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For i As Integer = 1 To 3 AddHandler Me.Controls("TextBox" & i).TextChanged, AddressOf TextBox_TextChanged Next End Sub Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) If System.Text.RegularExpressions.Regex.IsMatch(CType(sender, TextBox).Text, "[^0-9]") Then MessageBox.Show("数字で入力してください", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) With CType(sender, TextBox) .Text = .Text.Substring(0, .Text.Length - 1) .SelectionStart = .Text.Length End With End If Dim cnt1 As Integer Dim cnt2 As Integer Dim cnt3 As Integer If Integer.TryParse(TextBox1.Text, cnt1) And Integer.TryParse(TextBox2.Text, cnt2) And Integer.TryParse(TextBox3.Text, cnt3) Then For k = 1 To cnt3 For i = 1 To cnt1 For j = 1 To cnt2 Dim tb As TextBox = New TextBox() tb.Name = "tb" + i.ToString() Me.Controls.Add(tb) tb.Top = (i - 1) * 28 + 55 tb.Left = (j - 1) * 30 + 40 * (cnt2 * (k - 1)) + 10 tb.Width = 25 Next Next Next End If End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Bounds = New Rectangle(10, 10, 1350, 800) Me.AutoScroll = True End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim sum As Double Dim cnt As Integer = 0 For i As Integer = 1 To rows For j As Integer = 1 To columns Dim tb As TextBox = New TextBox() cnt += 1 : If cnt > rows * columns Then cnt = 1 tb.Name = "tb" + cnt.ToString Me.Controls.Add(tb) tb.Top = (i - 1) * 30 + (80 + 40 * rows) tb.Left = (j - 1) * 60 + 10 tb.Width = 40 sum = 0 For k As Integer = 1 To number sum += Double.Parse(CType(Me.Controls("tb" + (cnt + (rows * columns * (k - 1))).ToString()), TextBox).Text) Next tb.Text = sum.ToString() Next Next End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged End Sub End Class