• 締切済み

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

みんなの回答

  • x415f484f
  • ベストアンサー率71% (57/80)
回答No.7

# ANo.2, 4, 6 についてのご回答はご質問者の方やご覧になる方に間違った情報や知識を # 流布してはならないとのことだけかとは思いますが……。 # 結果として私の拙いアドバイスへの訂正となり申し訳ありません。 # 極力正しいことを伝えようとはしておりますが未熟者故なかなか思うようになりません。 ご質問される方の理解が深まればということで僭越ながら補足を付けさせて頂きます。 ANo.6 から引用 > VB2005の場合でも コードからフォームを起こしてしまうとデザイナーコード(Desiner.vb)は作成されません これは「マイクロソフトのサイトからダウンロードしたサンプルである VB.NET 2003 コードから 変換されたコードも同様になる」という意味になります。 追加された Form3 の場合には Form3.Designer.vb という別のファイルになっていますが 旧バージョンから変換された Form1 や Form2 にはコードの中にボタンやラベルなどの 配置位置などを記述した部分があるのです。 これは ANo.2 で仰られている『Windows フォーム デザイナで生成されたコード』というものです。 > 『Windowsフォームの追加』や『新しい項目の追加』などで追加したフォームの場合は dexiner.vbの先頭に > Partial Class From2 などと宣言されて このファイルは Form2 クラスの1部ですと宣言されます # Form2 となっておりますが、これは追加した Form3 のことを意味されておられるかと思われます。 この Partial やバージョンの相異点については以下のサイトをご覧になるとイメージがつかめるかと思われます。 ※ 「5-3.分割クラス」という項目で下の方にあります。 VB いろいろなクラス・構造体 - Module, Enum, Structure, Partial http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard50.htm

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.6

> くどくどと書いてしまいましたが、要するに Form3 にもこういう処理を追加する必要があるのです。 > ただしこれは Visual Basic .NET 2003 までの話です。 > Visual Basic 2005 は Form ごとの Sub New の定義はなく、敢えてそうしたいのであれば VB2005の場合でも コードからフォームを起こしてしまうとデザイナーコード(Desiner.vb)は作成されません 『Windowsフォームの追加』や『新しい項目の追加』などで追加したフォームの場合は dexiner.vbの先頭に Partial Class From2 などと宣言されて このファイルは Form2 クラスの1部ですと宣言されます

  • x415f484f
  • ベストアンサー率71% (57/80)
回答No.5

> Form3のSub Mainですか。。。。ほんとによくわかってなくて恐縮 > なのですが 失礼いたしました、Sub New が正しく Sub Main は誤りでした。 基礎的なことは説明しないのですが、私が間違えたお詫びとして説明します。 ANo.4 の方が仰られている通りなので、蛇足にしかなりませんが。 VB 2005 の場合は、私の記述したようなコードでも動作しますが、以前のバージョンは VB.NET 2003 などは明確に渡す必要がありました。 わかり易く「値」と言いますが、オブジェクトを識別するための値です。 >【Form2.vb】 > Private m_form1 As Form1 ここが識別する値を格納するのための変数を用意している部分、これは Form2 の中であれば どこからでも値を得ることが可能な Private 変数として宣言されています。 > Public Sub New(ByVal fr As Form1) ここで fr という変数に Form1 の識別する値が受け取られる。 Form1 から呼ぶ時に「m_form2 = New Form2(Me)」としていたのはそのためです。 > MyBase.New() > m_form1 = fr ここで fr から m_form1 に値が渡される。 何故かというと fr は Sub New の中でのみ生存できる変数であるため先ほど述べた m_form1 という変数に 値を渡しているのです。 > InitializeComponent() > End Sub ここで Sub New は終わるので fr という変数は消滅します。 くどくどと書いてしまいましたが、要するに Form3 にもこういう処理を追加する必要があるのです。 ただしこれは Visual Basic .NET 2003 までの話です。 Visual Basic 2005 は Form ごとの Sub New の定義はなく、敢えてそうしたいのであれば Form3 のフォームのコードの「全般」の箇所の Public Class Form3 のすぐ下の行で Public Sub New と書いてエンターだけ押せば次のような Sub New のスケルトンが自動で作られますので  Public Sub New()   ' この呼び出しは、Windows フォーム デザイナで必要です。   InitializeComponent()   ' InitializeComponent() 呼び出しの後で初期化を追加します。  End Sub これを修正すれば良いです。 と、説明下手の私が説明するよりも他の方のお書きになられた次のサイトをご覧になるほうが 早いかも知れません。 ※ VB.NET 2003 と VB 2005 の違いについてですが……   検索で最初に出たものです、検索すれば他にもあると思います。 VB.NET http://www.geocities.jp/hatanero/vbnet.html

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

>【Form2.vb】 > Private m_form1 As Form1 > Public Sub New(ByVal fr As Form1) > MyBase.New() > m_form1 = fr > InitializeComponent() > End Sub の役割ですが Form2のインスタンス(実体)を作る際に 引数としてForm1型オブジェクトが必要ということです この引数により 自分自身のメンバー変数 m_form1を初期化し 他のメソッド内で Form1のプロパティなどを使うのに使用します

  • x415f484f
  • ベストアンサー率71% (57/80)
回答No.3

ANo.1 で答えた者です。 ANo.1 の方法は VB 2005 であれば動く方法ですので Inherits System.Windows.Forms.Form が ついてるということは VB.NET 2003 かそれより前でバージョンでしょうか? 先ほどは Form1 についてうっかり見落としてましたが…… ANo.2 で回答されている方が仰るように m_form3 = New Form3() に引数が指定されていないようです。 例にされたのはここでしょうか? ユーザー インターフェース http://msdn.microsoft.com/library/ja/jpdnvs05/htm/2005/migrate/Form.asp 上記 URL からの引用 >【Form2.vb】 > Private m_form1 As Form1 > Public Sub New(ByVal fr As Form1) > MyBase.New() > m_form1 = fr > InitializeComponent() > End Sub だとすれば Form3 の Sub Main に処理するコードを付け忘れている可能性が高いと思われます。

koro_koro_koro
質問者

お礼

そうです。そのマイクロソフトのコードをほとんど引用しているだ けです。ちなみにVB2005のExpress Editionです。 Form3のSub Mainですか。。。。ほんとによくわかってなくて恐縮 なのですが >【Form2.vb】 > Private m_form1 As Form1 > Public Sub New(ByVal fr As Form1) > MyBase.New() > m_form1 = fr > InitializeComponent() > End Sub 上記のコードはどういう意味になるんでしょうか・・

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

# 開発環境のバージョン情報も記載しましょう Form2の作成には Form1のインスタンスをあらわす Meを渡していますが Form3の作成時には渡していませんね Form3を作成した手順が Foerm2を作成した手順と異なっていませんか Private Sub Button2_Click(引数省略) Handles ScaleHikito.Click   ' ここの Form3に引数 Meを追加する   m_form3 = New Form3(Me)   m_form3.ShowDialog()   m_form3.Dispose() End Sub VB2005の場合 VB.NETのメニューで プロジェクト > すべてのファイルを表示 にしておいて Form3.Desiner.vbと Form2.Desiner.vb を比較してみましょう VB2002/2003の場合は Form2.vb、Form3.vbのなかの 『Windows フォーム デザイナで生成されたコード』 を展開した部分に相違が無いか調べましょう

koro_koro_koro
質問者

お礼

コメントありがとうございました。 Form2は最初にあったコードを編集しただけで、同じようにするということでForm3の部分をコピー貼り付けしました。 私も同じようにm_form3 = New Form3(Me) と書くと"Public Sub New()"に対する引数が多すぎます。 とメッセージが出ましたので m_form3 = New Form3() としていました。

  • x415f484f
  • ベストアンサー率71% (57/80)
回答No.1

Form1 の Label1 や Label2 に Form2 や Form3 の TextBox で変更した値を入れたいだけなのでしょうか? 一部は余計なお世話なのですが、コードを書きます。 ※ 動作確認はしてません。 Form1 は良いとして Form2 と Form3 を > ==================== Form2.vb ======================= > Private m_form1 As Form1 Private m_form1 As Form1 や Private Sub TextBox1_TextChanged は不要なのではないでしょうか? Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  Form1.LabelText = Me.TextBox1.Text  Me.Close() End Sub Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  Me.TextBox1.Text = Form1.LabelText End Sub とする。 > ==================== Form3.vb ======================= > Private m_form1 As Form1 Private m_form1 As Form1 や Private Sub TextBox1_TextChanged は不要なのではないでしょうか? Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  Form1.LabelText2 = Me.TextBox1.Text  Me.Close() End Sub Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  Me.TextBox1.Text = Form1.LabelText2 End Sub とすれば、なさりたいことは実現可能かと思われますが?

koro_koro_koro
質問者

お礼

> Form1 の Label1 や Label2 に Form2 や Form3 の TextBox で変更>した値を入れたいだけなのでしょうか? > 一部は余計なお世話なのですが、コードを書きます。 いえいえ、ありがとうございました。 上記のコードで確認できました。

関連するQ&A

  • このコードはどこが間違っていますか?(至急)

    急ぎのため再度の質問失礼します。 (zのn乗)-(xのn乗+yのn乗)の計算をさせて、答えが0のときにメッセージを表示したいのですが、どのようなコードを書けばいいのでしょうか? 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 x = TextBox1.Text y = TextBox2.Text z = TextBox3.Text n = TextBox4.Text TextBox5.Text = (z ^ n) - (x ^ n + y ^ n) If (TextBox5 .Text= 0) Then Label6.Visible = True End If End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Label6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label6.Click End Sub End Class このコードだと答えが必ず-1になってしまうのですが、どこを直せばいいのでしょうか? 正しいコードを教えて下さい。 よろしくお願いします。

  • 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 ----------------------------------------------------- 以上

  • Elseifのコードが分かりません。(至急)

    急ぎのため再度の質問失礼します。 3つの数字すべてが7のとき、メッセージ1を出し、 どれか2つだけが7のときは、メッセージ2を出し、 どれか1つだけが7のときは、メッセージ3を出し、 どこにも7が含まれていないときは、メッセージ4を出すようにEndifを使って書きたいのですが、正しいコードを教えて下さい。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Randomize() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click PictureBox1.Visible = False Label4.Visible = False Label1.Text = CStr(Int(Rnd() * 10)) Label2.Text = CStr(Int(Rnd() * 10)) Label3.Text = CStr(Int(Rnd() * 10)) If End If End Sub Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click End Sub Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click End Sub Private Sub Label5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label5.Click 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 正しいコードの書き方を教えて下さい。 また特定の答えのときにメッセージを表示したいのですが、どうすればいいですか?

  • ボタンをクリックしても空白をリストに追加しないようにしたい

    初心者ですのでよろしくお願いいたします。 以下のようなコードでボタンを押すとテキストボックスに入力してあるテキストをリストに登録したいのですが、空白の場合は追加したくありません。どのように書けばいいでしょうか? よろしくお願いいたします。 (ちなみにLabel3にはリストに登録された数が出ます) Public Class Form1 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click End End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListBox1.Items.Add(TextBox1.Text) TextBox1.Clear() Label3.Text = ListBox1.Items.Count End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ListBox1.Items.Remove(ListBox1.SelectedItem) Label3.Text = ListBox1.Items.Count 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

  • Formの間に値を渡すことについて

    素人の質問が以下のとおりです。 【Form1の設置:】 TextBox1 Button1 【Form2の設置:】 Label1 【要求:】 1. Form1のTextBox1に値(文字)を入力して、Button1をクリックすれば 2. Form2のLabel1からTextBox1に入力された値(文字)を表示される。   要するFormの間に値を渡すことです。 もちろん、ネットでも調べましたが、説明されたことをよくわからなかったのでシンプルなコードが頂きたいです。 自分が作ったNGものもアップします。 ------------------Form1内に記載した内容------------- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim tmpMsg As String tmpMsg = TextBox1.text   Dim frmFrom1 As New Form1 frmFrom1.Show(tmpMsg) End Sub ---------------------------------------------------- ------------------Form2内に記載した内容------------- Public Class Form3 Private Sub Form2_Load(ByRef tmpMsg As String) Label1.Text = tmpmsg End Sub End Class ---------------------------------------------------- 結果として、エラーがなかったが、label1に何も表示されなかったです。 宜しくお願い致します。^@^

  • 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

  • form2がボタンを押すと消えてしまう

    vb2010で、作成しています。form1から、form2を呼び出し、okボタンまたは、cancelボタンを押すと、無条件でform2が消えてしまいます。私がしたいのは、form2(パスワード入力ウィンドウ)でテキストボックスにパスワードを入力してokボタンを押して、それが正しい(1234)ときのみform2を消去することです。現在のところ、入力したパスワードが間違っていてもokボタンを押すと、form2は消えてしまいます。 form1側のコードとform2側のコードは以下です。お手数ですが御教示いただけると幸いです。 /////////Form1 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim f As New Form2() f.TextBox1.PasswordChar = "*"c '//入力文字をマスクする If f.ShowDialog(Me) = DialogResult.OK Then If f.TextBox1.Text = "1234" Then f.Dispose() End If End If End Sub End Class /////////Form2 Public Class Form2 Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click Dim f As Form1 f = Me.Owner Me.DialogResult = DialogResult.OK End Sub Private Sub btncancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncancel.Click Dim f As Form1 f = Me.Owner Me.DialogResult = DialogResult.Cancel End Sub End Class

  • Vb.NetでFor~Nextの使い方

    登録したデータの中から該当するID(データの頭2つ)を抜き出し、それを参照にLabel5と6に名前と所属のデータを表示させています。 該当データがない場合はLabel4に該当なしと表示します。 下の様に作ってみたのですが、どのIDを打っても名前と所属はちゃんと出るのですが、該当なしまで一緒に表示されます。 これはどこを変更したらいいのでしょうか? Public Class Form1 Dim data(9) As String Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Data(0) = "01山田 花子     デバイス部" 以下Data(9)まで続く・・       End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For i = 0 To 9 If Mid(ShainData(i), 1, 2) = TextBox1.Text Then Label5.Text = Mid(Data(i), 3, 9) Label6.Text = Mid(Data(i), 13, 2) Else Label4.Text = "該当なし。" End If Next

専門家に質問してみよう