デバッグエラーが発生!VBでお絵かきツールを作成する際の対処方法は?

このQ&Aのポイント
  • VBで作成した簡単なお絵かきツールで、ボタン4の「開く」イベントをキャンセルした際にデバッグエラーが発生しています。具体的なプログラム内容と対処方法を教えてください。
  • VBで作成したお絵かきツールで、ボタン4の「開く」イベントでキャンセルをクリックした場合にデバッグエラーが発生しています。どのように対処すれば良いでしょうか?
  • VBで作成したお絵かきツールで、ボタン4の「開く」イベントでデバッグエラーが出る問題に直面しています。具体的な修正方法を教えてください。
回答を見る
  • ベストアンサー

デバッグエラー

VBで、簡単なお絵かきツールを作りましたが、ボタン4(開くイベント)で、「開く」ではなく、キャンセルをクリックした際に、デバッグエラーが出ました。 プログラムを記載しておきますので、対処方法を教えていただけませんか。 Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Dim filename As String OpenFileDialog1.AddExtension = True OpenFileDialog1.Filter = "すべてのファイル|*.*" OpenFileDialog1.ShowDialog() OpenFileDialog1.Title = "開くファイルを指定してください。" filename = OpenFileDialog1.FileName If filename <> "" Then b.Dispose() canvas.Dispose() canvas = Image.FromFile(filename) b = Graphics.FromImage(canvas) PictureBox1.Image = canvas End If End Sub です。 ちなみに、保存の際には出ません。

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

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

#画面潰れてて見えないけどまぁこれくらいなら…… ShowDialog()の戻り値で分岐しないためです。 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.openfiledialog(v=VS.100).aspx なお、ShowDialog()より後にTitleを設定しているのは意味がありません。

toshisanpc
質問者

お礼

ご回答ありがとうございました。 openfiledialogのところに、savefiledialogで使用しているファイル名を持ってきて、ifのところの<>""を=nothingに変えたとところ、デバッグエラーがでませんでした。

関連するQ&A

  • ファイルダイアログのカレントフォルダ

    vb.netのOpenFileDialogでダイアログを開いたとき、最初はマイドキュメントが表示されますが 違うフォルダからファイルを選ぶと、次にダイアログを開いたときはそのフォルダ(カレントフォルダ?)がまず表示されます。 その情報はどこに保存されてるのですか? 同じパソコンでプログラムをコピーして交互に動かしてもカレントフォルダはその度に変わってるようです。 別のパソコンにプログラムをコピーしたら(最初だけは)マイドキュメントからになるんですか? もう1つ質問で RestoreDirectoryプロパティにtrueを設定してもカレントフォルダは変わるようなのですが なぜでしょう? 試しに作ったコードは↓です。 環境はvb2005、XP-sp3です。 -------------------- Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' OpenFileDialog の新しいインスタンスを生成する (デザイナから追加している場合は必要ない) Dim OpenFileDialog1 As New OpenFileDialog() ' ダイアログボックスを閉じる前に現在のディレクトリを復元する (初期値 False) OpenFileDialog1.RestoreDirectory = False ' ダイアログを表示し、戻り値が [OK] の場合は、選択したファイルを表示する If OpenFileDialog1.ShowDialog() = DialogResult.OK Then MessageBox.Show(OpenFileDialog1.FileName) End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ' OpenFileDialog の新しいインスタンスを生成する (デザイナから追加している場合は必要ない) Dim OpenFileDialog2 As New OpenFileDialog() ' ダイアログボックスを閉じる前に現在のディレクトリを復元する (初期値 False) OpenFileDialog2.RestoreDirectory = True ' ダイアログを表示し、戻り値が [OK] の場合は、選択したファイルを表示する If OpenFileDialog2.ShowDialog() = DialogResult.OK Then MessageBox.Show(OpenFileDialog2.FileName) End If End Sub End Class --------------------

  • VBでデバックするとエラーになる。

    VBでデバックすると下のようなエラーがでます ArgumentNullExceptionはハンドルされませんでした。 値を Null にすることはできません。 パラメーター名: activationContext VBを初めて日が浅いのでヘルプを読んでも意味が理解できませんでした。 なので、易しく回答してもらえると嬉しいです コードは下です Public Class Form1 'TextBox2に入力したURLをWebBrowser1で表示する Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click WebBrowser1.Navigate(TextBox2.Text) End Sub 'ブラウザ→戻るでWebBrowser1を処理する Private Sub 戻るToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 戻るToolStripMenuItem.Click WebBrowser1.GoBack() End Sub 'ブラウザ→進むでWebBrowser1を処理する Private Sub 進むToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 進むToolStripMenuItem.Click WebBrowser1.GoForward() End Sub 'ブラウザ→テキストボックスにURLを入力した時の処理 Private Sub ToolStripTextBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripTextBox1.Click WebBrowser1.Navigate(ToolStripTextBox1.Text) End Sub 'TextPageのタブをクリックした時のイベント Private Sub TabPage1_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabPage1.Enter TextBox2.Visible = False Button1.Visible = False ブラウザToolStripMenuItem.Enabled = False 書式ToolStripMenuItem.Enabled = True ToolStripMenuItem1.Enabled = True End Sub 'BrowserPageのタブをクリックした時のイベント Private Sub TabPage2_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabPage2.Enter TextBox2.Visible = True Button1.Visible = True ブラウザToolStripMenuItem.Enabled = True 書式ToolStripMenuItem.Enabled = False ToolStripMenuItem1.Enabled = False End Sub Private Sub 新規ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 新規ToolStripMenuItem.Click TextBox1.Text = ("") End Sub Private Sub 開くToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 開くToolStripMenuItem.Click Dim selectButton As DialogResult Dim filename As String selectButton = OpenFileDialog1.ShowDialog() filename = OpenFileDialog1.FileName If selectButton = DialogResult.OK Then Try TextBox1.Text = _ My.Computer.FileSystem.ReadAllText(filename, System.Text.Encoding.Default) Me.Text = "Visual Text" & filename Catch ex As Exception End Try End If End Sub Private Sub 保存ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 保存ToolStripMenuItem.Click Dim selectButton As DialogResult Dim filename As String selectButton = SaveFileDialog1.ShowDialog() filename = SaveFileDialog1.FileName If selectButton = DialogResult.OK Then Try My.Computer.FileSystem.WriteAllText(filename, TextBox1.Text, False, System.Text.Encoding.Default) Me.Text = "Visual Text" & filename Catch ex As Exception End Try End If End Sub Private Sub フォントToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles フォントToolStripMenuItem.Click Dim fd As New FontDialog() fd.Font = TextBox1.Font fd.Color = TextBox1.ForeColor fd.MaxSize = 19 fd.MinSize = 8 fd.FontMustExist = True fd.AllowVerticalFonts = False fd.ShowColor = True fd.ShowEffects = True fd.FixedPitchOnly = False fd.AllowVectorFonts = True If fd.ShowDialog() <> DialogResult.Cancel Then 'TextBox1のフォントと色を変える TextBox1.Font = fd.Font TextBox1.ForeColor = fd.Color End If End Sub End Class

  • 重複した文字列をカウントして取り出したい

    初めて質問させていただきます。 VB初心者です。 ソートされた文字列の書き込まれたファイルを読み、 (文字列は、 ”000” ”001” ”001” ”001” ”002” ”002” ”003” といったように書き込まれています。) そこから、3つ連続して並んでいる文字列を探し出して、 その文字列と、3つ連続していた文字列がいくつあったのか表示するプログラムを作りたいのですが、 どうにも処理速度が遅く、さらに行数が1万を超えると、応答なしになってしまいます。 どなたか、上手い処理の方法があれば、ぜひともご教授の程をお願いします。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click OpenFileDialog1.FileName = "" OpenFileDialog1.InitialDirectory = "c:\" If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then TextBox1.Text = My.Computer.FileSystem.ReadAllText _ (OpenFileDialog1.FileName, System.Text.Encoding.Default) End If End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim x As Integer Dim xyz As Integer '行数を調べる。 Dim i As Integer = TextBox1.Lines.Length TextBox2.Text = (i - 1 & "行") MessageBox.Show("一時停止") For ix = 0 To i - 2 '1行目と2行目を比較 If TextBox1.Lines(x) = TextBox1.Lines(x + 1) Then '2行目と3行目を比較 If TextBox1.Lines(x + 1) = TextBox1.Lines(x + 2) Then '3つある番号を記入。 TextBox2.Text = TextBox2.Text + vbCrLf + TextBox1.Lines(x + 2) '3回重複したことをカウント。 'MessageBox.Show("3発見") xyz = xyz + 1 Else End If Else End If '調べる行を+1 x = x + 1 Next TextBox2.Text = TextBox2.Text + vbCrLf + ("3つ以上は、" & xyz & "個") End Sub Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk End Sub Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged 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

  • JavaScriptで・・・

    こんにちは。 Visual Studio.NETで作った以下のフォーム(下のURLを見てみてください!)を、JavaScriptでも作りたいのです。 http://73megane.fc2web.com/goo.html このフォームのプログラムはこうです Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Select Case (Te.Text) Case "アジカン" Pic.Image = Image.FromFile("akg1.bmp") Case "アジアンカンフージェネレーション" Pic.Image = Image.FromFile("akg1.bmp") Case "ASIAN KUNG-FU GENERATION" Pic.Image = Image.FromFile("akg1.bmp") End Select End Sub もしJavaScriptでどうやって作るかご存知の方、教えてください。 初心者すぎて困っています。よろしくお願いいたします!!

  • 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

  • VB.NETでXMLの読み込みを行うと例外エラーが出てしまい大変困って

    VB.NETでXMLの読み込みを行うと例外エラーが出てしまい大変困っています。どなたかお願いします。 Protected Sub Button4_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button4.Click Dim FILENAME As String FILENAME = "C:\\TEST\" If i = 1 Then FILENAME = FILENAME & "AAA\111.xml" Call testmethod(FILENAME) ElseIf i = 2 Then FILENAME = FILENAME & "BBB\222.xml" Call testmethod(FILENAME) End If End Sub Private Sub testmethod(ByVal FILENAME) If File.Exists(FILENAME) Then Dim xlr As XmlTextReader xlr = New XmlTextReader(FILENAME) While xlr.Read() Select Case xlr.LocalName Case "Personal" TextBox1.Text = xlr.ReadString Case "LastUpdate" Label1.Text = xlr.ReadString End Select End While xlr.Close() End If End Sub こんな感じでコードを書いているのですがWhile xlr.Read()のところで例外エラーが出てしまいます。 原因が全然つかめず困っています。 New XmlTextReader(FILENAME)のFILENAMEを変数でなく直接パスを書くとうまくいくのですが変数にするとなぜかハンドリングできなくなります。 どなたかご解説お願いします。

  • VC++:ダイアログがDispose()できない

    前略 ・.NET 2012のVC++を使っています。 ファイルをオープンするプログラムをつくろうとしています。その過程でダイアログをオープンするプログラムをネットにあったC#のコードを参考に、openFileDialog1->Dispose();をコメントアウトした以下に示すものをつくりました。このコードは特に問題なくコンパイルできて動作します。  しかし、C#のコードにあった openFileDialog1.Dispose();から変更したopenFileDialog1->Dispose();を追加すると "error C2039: 'Dispose' : 'System::Windows::Forms::OpenFileDialog' のメンバーではありません。"と云うエラーメッセージがでてコンパイルできません。 <質問>  VC++の場合 C#のopenFileDialog1.Dispose();に相当するオブジェクト破棄のコードは不要なのでしょうか?  もし、破棄が必要なのであればどのようなコードを書けばよいのでしょうか?  どなたかお分かりになる方、ご教示いただければ幸いです。 以上、よろしくお願いします。 //------------------------------------------------------- private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { OpenFileDialog^ openFileDialog1 = gcnew OpenFileDialog();//new OpenFileDialog(); openFileDialog1->Title = "ダイアログのタイトルをココに書く"; openFileDialog1->InitialDirectory = "c:\\"; openFileDialog1->FileName = "初期表示するファイル名をココに書く"; if (openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) MessageBox::Show(openFileDialog1->FileName); // 不要になった時点で破棄する (正しくは オブジェクトの破棄を保証する を参照) // openFileDialog1->Dispose(); };

  • 無限ループからの脱出用の文について

    **************************************************************** Button2がクリックされたらButton1の中のwhileの無限ループから抜け出すようにしたいのですが、どのようにすればよいのでしょうか。プログラミング初心者な為、初歩的な質問で申し訳ありません。 **************************************************************** Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click   質問1:Button2がクリックされた時のプログラム End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click While True   If 質問2:(Button2がクリックされたとき)Then Exit While End While End Sub

  • 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

専門家に質問してみよう