• ベストアンサー

クラス間(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

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答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

try2005
質問者

お礼

今回の回答は本当に勉強になりました、私のつたない質問に ご丁寧に教えて頂き、ありがとうございました。

try2005
質問者

補足

またまたの解答ありがとうございます。 また補足が遅くなり申し訳ございません。 >VB2005?という事はVisualBasic2005のBetaでも使ってるって事かなぁ? はい、本に付録で付いていたDVDを使ってインストールしました。 VBに関する年鑑は非常にありがたいです。どの本をみても結構VB6からの変更点は....と書いてあり、VB.netとの違いが今ひとつ判っておりませんでした。 >改訂版1って・・・・動く? はい、今のところ[Hello World!]や[スロットマシーン](Rndをつかう奴) [電卓]等は作れました、正常に動くかどうかは人に見てもらっていないので判りませんが.... >エラーは出ないと思うのだが、何からも参照されていないインスタンスは危険よ。 上記の教えて頂いた事を今から実行してみます。 今のままでは???な感じですが、ひとつひとつ勉強して行こうと思います。 ありがとうございました。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>私なりのコメント 別におかしくないですよ。 ただ、注意すべき点としては、 (#1の方も指摘されている様に) 変数の(f2とかf3の)寿命ということですね。 それをプログラム上どうするかということを考えておかねばなりません (どうするかについては、質問文のプログラムからは、なんとも言えません)

try2005
質問者

お礼

教えて頂いた変数の寿命について現在勉強中です。 ご解答ありがとうございました。

try2005
質問者

補足

>ただ、注意すべき点としては、 >(#1の方も指摘されている様に) >変数の(f2とかf3の)寿命ということですね 解答ありがとうございます。補足が遅くなり申し訳ございません。 まずはForm間での値を渡す事をしたかったので寿命?の事は考えていませんでした。 この寿命という言葉もいろんな所で書かれていますが、 要するに変数に覚えこました情報が消える(無効になる?)までってことですよね。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答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() End Sub 'で、Form2のラベルに、TextBox1の内容をセットして表示できるけど…

try2005
質問者

補足

回答して頂きまして、まことにありがとうございます。 教えて頂いたのを少しいじりましたがサックっと作れてしまいました。 下記に私なりのコメントを付けましたので、おかしい解釈をしていれば お時間のある時で結構ですので教えてください。 <改訂版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

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 申し訳ないが余りにもつっこみどころ満載で何をどうしようとかそんなレベルではない。当方も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間に親子関係):→簡潔に説明できないので割愛  とにかくもう少し基本からやりましょう。先にオブジェクト指向プログラミングとは何ぞやをやらないと今のままでは難しいです。

try2005
質問者

補足

>他の言語はやった事ないという事だが、余りにも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があれば教えてください。 解答ありがとうございました。

関連するQ&A

  • 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

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

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

    前回、同じようなプログラムを簡単にまとめる方法を教えて頂いたのですが新しい事で困ってしまいました。 説明が非常にへたくそなので、プログラムをそのまま書きます・・・・ スイマセン 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

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

    急ぎのため再度の質問失礼します。 (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になってしまうのですが、どこを直せばいいのでしょうか? 正しいコードを教えて下さい。 よろしくお願いします。

  • 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 正しいコードの書き方を教えて下さい。 また特定の答えのときにメッセージを表示したいのですが、どうすればいいですか?

  • 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

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

    初心者ですのでよろしくお願いいたします。 以下のようなコードでボタンを押すとテキストボックスに入力してあるテキストをリストに登録したいのですが、空白の場合は追加したくありません。どのように書けばいいでしょうか? よろしくお願いいたします。 (ちなみに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

  • 「Me」を「Form1」にするとエラーになる理由

    VB2008です。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "a" Form1.Text = "a" ’←「Form1.Text」に波線ができる。 End Sub End Class というように、 「Me」を「Form1」にすると 「既定のインスタンスからそれ自体を参照できません。'Me' を使用してください。」 となります。 VBAなら「Me」を「Form1」にしてもエラーにならないのに、 どうしてVBだとエラーになるのでしょうか?

  • 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の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

専門家に質問してみよう