画像が読み込めない

このQ&Aのポイント
  • VB2008Express Editionを使っている初学者が、ボタンが押されたら画像を変更したいと思っていますが、ファイルが見つからないというエラーが出ています。
  • 現在のファイル構造を確認したところ、問題がなさそうです。絶対パスでファイルを指定すれば成功するため、ファイルが壊れている可能性やコードの間違いではなさそうです。
  • 画像が読み込めない原因としては、ファイルの場所や名前が間違っている、またはファイルが存在しないなどが考えられます。解決方法を教えていただけると幸いです。
回答を見る
  • ベストアンサー

画像が読み込めない

VB2008Express Editionを使っています。 初めての勉強にといらいら棒を作っています。 そこにボタンが押されたらボタンの表面の画像を 変えるようにしたくて以下のように書きました。 Private Sub Button1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown Button1.Image = Image.FromFile("image.gif") End Sub また現在のファイル構造はこうなっています。 ├─いらいら棒 │ │─app.config │ │─Form1.Designer.vb │ │─Form1.resx │ │─Form1.vb │ │─Form2.Designer.vb │ │─Form2.resx │ │─Form2.vb │ │─image.gif │ │─Module1.vb │ │─いらいら棒.vbproj │ │─いらいら棒.vbproj.user │ │─アイコン.ico │ │ ~~~~~~~以下省略~~~~~~~ こうなっていてForm2にさっきのコードは書いてあるのですが どうも「ファイルがない」のとエラーが来ます。絶対パスで書くと成功するのでファイルが壊れてるとか、コードがまちがっているとかそういう問題ではなさそうです。 だれかこの解決方法がわかる方よろしくお願いします。

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

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

> 「ファイルがない」のとエラーが来ます。絶対パスで書くと成功する デバッグ実行しているのかと思われますが、そうでしょうか? 「Button1.Image = Image.FromFile("image.gif")」というコードの上の行に 「MessageBox.Show(System.IO.Directory.GetCurrentDirectory())」という 行を追加して実行してみてください。  メッセージボックスに表示されたディレクトリが現在のディレクトリです。 そのディレクトリに「image.gif」が存在しないとフルパスにしないと表示 されません。 配布または単体で動作させる時は「image.gif」と実行ファイルと同じ場所に 置いて動作させることが想定されますが、その場合には「System.IO.Directory. GetCurrentDirectory」と組み合わせないと「Image.FromFile("image.gif")」 としたままではエラーとなる可能性があります。 下記の URL を参考にして対処方法を自分なりに考えてみてはいかがでしょう? @IT:.NET TIPS 実行ファイルのパスを取得するには? - C# http://www.atmarkit.co.jp/fdotnet/dotnettips/016exepath/exepath.html

horino
質問者

お礼

ありがとうございました。デバッガ用のファイルがあるなんで知りませんでした。 また勉強になりました。フルパス取得については自分で考えてみたいと思います。

関連するQ&A

  • 【VB.NET】マウスカーソルがどこにあってものXButton1&2を押されたらそれを知るには?

    こんばんは。 マウスカーソルがどこにあってものXButton1&2を押されたら知るにはどうしたら良いのでしょうか? 具体的にはFORMデザインでメニューバーやタブコントロールが張られてる状態で Private Sub Form1_MouseDown(ByVal sender As _ Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown     Select Case e.Button       Case MouseButtons.XButton1         '処理       Case MouseButtons.XButton2         '処理     End Select End Sub だとFORM上の何も無い所でしか受け付けてくれません。 マウスカーソルがメニューバーやタブコントロールの上にあってもプログラムがアクティブの状態ならXButton1&2が押されたら処理をさせたいのですがどうすれば良いのでしょうか?

  • 【.NET】ボタンからマウスが離れた際に発生するイベント?

     こんばんは.いつも勉強させていただいております. 質問させていただきます.どうぞよろしくお願いたします.  Form内のボタンが小さい為,目的のボタンかどうかを視覚的に 確認しながらクリックできるように,Button1をMouseDownしたときに, BackGroundImageを変えるようにしてみました. (Button1の初期画像は「画像1」でございます)   Private Sub Button1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) _     Handles Button1.MouseDown     Button1.BackgroundImage = My.Resources.画像2   End Sub   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _     Handles Button1.Click     Button1.BackgroundImage = My.Resources.画像3         :      (色んな動作)         :     Button1.BackgroundImage = My.Resources.画像1   End Sub が,この方法だとButton1を押した状態のままカーソルをButton1の外へ 移動すると, 画像2のままになってしまいます...  マウスのフォーカス(?)が外れたことを知るようなイベントというものは ないものでございましょうか??  色々と検索したつもりでございますが,解決いたしません...  お詳しい方がいらっしゃいましたら,是非ともアドバイスいただきたく お願い申し上げます.  どうぞよろしくお願いいたします.

  • VB2008 Formドラッグ時の描画を早くしたいです..

     こんばんは,質問させていただきます. どうぞよろしくお願いたします.  Formが4つあるアプリを作成しております.いずれをドラッグされた際も これらが一緒に動くように,下のように方法でコーディングいたしました. が,コントロールの数が多いせいか,カクカク動いてしまいます.  (↓Form3をドラッグした際のコードでございます)   Private mousePoint As Point   Private Sub Form3_MouseDown(ByVal sender As Object, _     ByVal e As System.Windows.Forms.MouseEventArgs) _     Handles MyBase.MouseDown     If (e.Button And MouseButtons.Left) = MouseButtons.Left Then       mousePoint = New Point(e.X, e.Y) '位置を記憶     End If   End Sub   Private Sub Form3_MouseMove(ByVal sender As Object, _     ByVal e As System.Windows.Forms.MouseEventArgs) _     Handles MyBase.MouseMove 'マウスが動いたとき     If (e.Button And MouseButtons.Left) = MouseButtons.Left Then       Me.Left += e.X - mousePoint.X       Me.Top += e.Y - mousePoint.Y       Form1.Left += e.X - mousePoint.X       Form1.Top += e.Y - mousePoint.Y       Form2.Left += e.X - mousePoint.X       Form2.Top += e.Y - mousePoint.Y       Form4.Left += e.X - mousePoint.X       Form4.Top += e.Y - mousePoint.Y     End If   End Sub  VBでFormの動きを早くする方法というのは,単純にコントロール数を 減らすか,またはPCのスペックを上げるしか無いのでしょうか・・・?  もしお詳しい方がいらっしゃいましたら,是非とも何かアドバイスを いただきたくお願い申し上げます. どうぞよろしくお願いいたします.

  • Form1.vbをイベントなしで動作させるには?

    VB2005初心者で困っています。 Menu.vbとForm1.vb, Form2vb, Form3.vb・・・を作り、Menu.vbのButton1_ClickでForm1.Show()としてForm1.vbに移行し、次にForm1のButton1_clickイベントでExcelからDataを読み込んでGraphを書かせています。(この時は問題なく動作しています) これを、Form1に移行したらすぐにGraphを表示しようとして、Form1.vbの Public Class Form1 Private Sub Button_Clic(Byval sender As System・・・・・)Handles Button1.click   Dim g As Graphics   ・・・・ を変更して、  Private Sub Form1_Load(Byval sender As System・・・・)Handles MyBase.load Me.Show() Dim g As Graphics   ・・・・ と、しましたが、一瞬Graphは表示しますが、すぐに消えます。 また、罫線はまったく表示しません。 Button_ClickイベントなしでForm1を動かすにはどうすればよいのでしょうか?

  • 他のFormのクリックイベント

    教えてください! 他のFormのクリックイベントを実行できますか? Form2のButton2をクリックした時に、Form1の「Button1_Click」を実行させることができますか? 出来るとしたら、Form2の「Button2_Click」にはどのように記載したらいいのでしょうか? [Form1]より Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)・・・ [Form2]より Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs)・・・ End Sub 宜しくお願いします。

  • 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

  • VB205のPicturebox上でのMousewheelイベント

    VB2005で、Form1にPanel1をはりつけ、その中にPicturebox1をはりつけ、Pictureboxの範囲の中で、マウスをホィールしても、イベントが発生しません。ためしに、Picturebox1とPanel1について書いてみましたが、だめでした!(Form1では、発生します) 何がダメなんでしょうか?どなたか詳しい方がいらっしゃいましたら教えて頂けないでしょうか?宜しくお願い致します。 Private Sub PictureBox1_MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseWheel MsgBox("TEST_Picturebox") End Sub Private Sub Panel1_MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseWheel MsgBox("TESUT_Panel") End Sub

  • VB2010において同様のイベントを設定する。

    現在、VisualBasic2010を用いてPanel1~Panel4をPanel5へ移動させて図形を作成させるコードを書いております。 今後Panel1~Panel4をPanel5だけでなく、Panel6,Panel7にも同様に移動させたいと考えておりますが、やりかたがわかりません。 画像はPanel5へ移動させたものです。同様に下に配置したPanel6へも移動させたいです。 わかる方がおられましたら、お力添えいただけると助かります。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Panel5.AllowDrop = True End Sub Private Sub Panel1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown, Panel2.MouseDown, Panel3.MouseDown, Panel4.MouseDown sender.DoDragDrop(sender, DragDropEffects.Move) End Sub Private Sub Panel5_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Panel5.DragDrop Dim srsPnl As Panel = e.Data.GetData(GetType(Panel)) Dim dstPnl As New Panel dstPnl.Size = srsPnl.Size dstPnl.Location = Panel5.PointToClient(CursorPosition) 'New Point(e.X, e.Y) dstPnl.BackColor = srsPnl.BackColor AddHandler dstPnl.MouseDown, AddressOf dstPnl_MouseDown AddHandler dstPnl.MouseMove, AddressOf dstPnl_MouseMove Panel5.Controls.Add(dstPnl) End Sub Private Sub Panel5_DragEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Panel5.DragEnter If e.Data.GetDataPresent(GetType(Panel)) Then e.Effect = DragDropEffects.Move End If End Sub Private previousPos As Point Private Sub dstPnl_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown previousPos = CursorPosition() End Sub Private Sub dstPnl_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) If e.Button = Windows.Forms.MouseButtons.Left Then Dim nowPos As Point = CursorPosition() DirectCast(sender, Panel).Left += nowPos.X - previousPos.X DirectCast(sender, Panel).Top += nowPos.Y - previousPos.Y Console.WriteLine(nowPos.X & "-" & previousPos.X) previousPos = nowPos End If End Sub Function CursorPosition() As Point Return New Point(CInt(Cursor.Position.X / 10) * 10, CInt(Cursor.Position.Y / 10) * 10) End Function End Class これが現在書いているコードです。

  • VB2010の、Formを開く動作に関する質問です

    VB2010のFormについてお聞きしたいことがあります。 例えばForm1とForm2の2つがあるとして、 ・Form1上のボタンをクリック後Form2が表示される ・Form2を表示後Form1は自動で閉じられる。 この様な事をするにはどの様に行えばよろしいでしょうか? 試しに、 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click   Form2.Show()   Me.Close() End Sub と、してみたのですが Form2が表示された直後に1と2両方消えてしまいました。 改善方法を教えていただけると嬉しいです。 よろしくお願いいたします。

  • Rectangleで画像の座標を指定しても、違う座標の範囲を取得してしまう

    vb2005で LEADTOOLS 16.5J を使用して元画像よりトリミングするプログラムを作っています。 Private Sub RasterImageViewer1_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles theViewer.MouseDown 'クリックされた地点より、長さ150の正方形の座標を指定 Dim strRectangle As Rectangle = New Rectangle(e.X, e.Y, 150, 150) 'リージョンを作成 RasterImageViewer.Image.AddRectangleToRegion(Nothing, strRectangle, Leadtools.RasterRegionCombineMode.Set) End Sub 画像をクリックすると、リージョン(トリミングする範囲の点線)の枠が表示されるのですが、 座標の左上(0,0)から離れれば離れるほど、クリックした地点より右下にずれてリージョンの枠が表示されてしまいます。 調べてみると、オフセットを調整する処理が必要らしいことは分かったのですが、 具体的にどうすれば良いのか分かりません。 ご伝授よろしくお願いします。

専門家に質問してみよう