![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
VB.Netで開発をしています。
フォーム1のピクチャーボックスにアニメぎfを表示させて、
その上から40%ほど透過させたフォーム2を表示させて
フォーム1全体の色合いを変える処理をしたいのですが
フォーム2を表示させるとフォーム1にあったアニメGifの動きが止まってしまいます。
その後、フォーム2を閉じてもフォーム1のアニメGifはとまったままになってしまいます。
他のフォームを表示させるとアニメGifは正常に動かなくなってしまうのでしょうか?
ちなみにフォーム1の処理自体は正常に動いています。
どなたかご存知方いましたらご教授ください。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
>フォーム1にはPictureBoxがあってそのイメージにGifアニメ
ならば、ボックスを継承したクラスを作成し、それに処理をさせたらよいかと思います。
そうしたら、今後も楽をできると思いますし、思いついた機能を盛り込ませやすいです。
さらに、そのクラスを別プロジェクトにも流用しやすいです。
以下に改造手順を書きますが、MSのフレーム拡張の基礎なので、多少面倒ですが、がんばってみてください。
(機能は最小限ですので、バグが出たら自分でつぶしてください。わからなければ別スレッドで、継承について質問してください。)
まずクラスを作成してください
MyPicture.vb
'------------------------------------------------------------------------------------------------------
Public Class MyPicture
Inherits System.Windows.Forms.PictureBox
'イメージクリア用
Public Sub ImageSet()
Me.Image = Nothing
End Sub
'イメージセット用
Public Sub ImageSet(ByVal p_strImagePath As String)
Call ImageSet()
Me.Image = New Bitmap(p_strImagePath)
Call ImageAnimator.Animate(Me.Image, New EventHandler(AddressOf Me.Image_FrameChanged))
End Sub
'イベントハンドラ:再描画
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
System.Drawing.ImageAnimator.UpdateFrames()
End Sub
'イベントハンドラ:アニメーション描画
Private Sub Image_FrameChanged(ByVal sender As Object, ByVal e As EventArgs)
Me.Invalidate()
End Sub
End Class
'------------------------------------------------------------------------------------------------------
次にフォームをコードで開き、ピクチャボックスの宣言部を見つけ、改造を加えてください
------------------------------------------------------------------
※1.Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox
※2.Me.PictureBox1 = New System.Windows.Forms.PictureBox()
------------------------------------------------------------------
を
------------------------------------------------------------------
※1.Friend WithEvents PictureBox1 As MyPicture
※2.Me.PictureBox1 = New MyPicture()
------------------------------------------------------------------
という感じ
最後に
>fs = New System.IO.FileStream("File名", IO.FileMode.Open)
>PictureBox1.Image = Image.FromStream(fs)
を
PictureBox1.ImageSet("D:\My Documents\My Pictures\moving.gif")
とするだけで、良いです。
画像の切り替えも、パスを渡すだけで、アニメーションが描画されます。
No.1
- 回答日時:
こんな感じでフォーム1があるのですか?
Private gifimg As Bitmap
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
gifimg = New Bitmap("D:\My Documents\My Pictures\moving.gif")
Call ImageAnimator.Animate(gifimg, New EventHandler(AddressOf Me.Image_FrameChanged))
End Sub
Protected Overrides Sub OnPaint(ByVal e As Windows.Forms.PaintEventArgs)
Call ImageAnimator.UpdateFrames(gifimg)
Call e.Graphics.DrawImage(gifimg, 0, 0)
End Sub
Private Sub Image_FrameChanged(ByVal sender As Object, ByVal e As EventArgs)
Call Me.Invalidate()
End Sub
であれば、フォーム2を表示させても大丈夫のような気がしますが、だめであれば
Me.Invalidate
を実行してあげると良いと思います。
別方法でアニメーションを走らせているのであれば、コードを見ないことには想像も付きません。
この回答への補足
説明不足ですいません。
フォーム1にはPictureBoxがあってそのイメージにGifアニメを指定してます。
コードは以下の通りです。
Dim fs As System.IO.FileStream
fs = New System.IO.FileStream("File名", IO.FileMode.Open)
PictureBox1.Image = Image.FromStream(fs)
1050YENさんの方法でGifアニメを表示した場合は大丈夫でした。
ただ画像の数(コントロールの数)が多く、動的に表示を切り替えているので
この方法のままでいい方法があればなぁ、と思っています。
不思議なことに動いているGifアニメの全体をフォームで覆わなければ動いています。
全体を覆ってしまうと動きが止まってしまうようです。
もしも分かるようでしたらご教授願います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- Access(アクセス) Accessでセレクタをダブルクリックで別フォームで詳細表示 3 2022/12/20 10:36
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- JavaScript 空白で入力フォームのボタンをクリックしたら、ブラウザの上部からjavascriptで 表示されるアラ 1 2022/05/20 11:16
- Access(アクセス) アクセス フォームの自動入力 1 2023/03/20 00:18
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Access(アクセス) Dlookupにエラーがでてしまう 1 2022/10/31 14:35
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
VBでアニメーションGIFを表示するには
Visual Basic(VBA)
-
DateTimePickerでに年月までしか選択できないようにしたいです。
Visual Basic(VBA)
-
C# Form上に配置されたコントロールに重なるように透過GIF(PNG)を表示したい
C言語・C++・C#
-
-
4
文字数に合わせて、コントロールの幅を設定する方法
Visual Basic(VBA)
-
5
VB2005別フォームでのGIF動画の表示
Visual Basic(VBA)
-
6
CloseとDisposeの違い
Visual Basic(VBA)
-
7
重い処理を行っているとGIFアニメが止まってしまう
JavaScript
-
8
gif画像をエクセルのシートに貼り付けて動かしたい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
Form_Load と Form_Activate の...
-
エクセルVBAのフォームを最...
-
VBAでユーザーフォームを再表示...
-
ACCESSのフォーム、開くんです...
-
ユーザーフォームのテキストボ...
-
クリックイベントなのに、2回ク...
-
Hideについて(.NET)
-
Excelにて、ユーザーフォームで...
-
Microsoft Formsの「個人情報や...
-
MSGBOXのフォント大きさ変更
-
ExcelVBAのユーザーフォームの...
-
コントロールの存在確認
-
モーダルフォームとモードレス...
-
ユーザーフォーム上に現在日時...
-
【VBAユーザーフォームで閉じる...
-
ユーザフォームの印刷
-
vb2008にてDefaultCellStyleが...
-
フォームウィンドウを最前面に...
-
keypressイベントでEnterキー(a...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
ユーザーフォームのテキストボ...
-
クリックイベントなのに、2回ク...
-
MSGBOXのフォント大きさ変更
-
VBAでユーザーフォームを再表示...
-
Hideについて(.NET)
-
Form_Load と Form_Activate の...
-
モーダルフォームとモードレス...
-
コントロールの存在確認
-
ユーザーフォーム上に現在日時...
-
【VBAユーザーフォームで閉じる...
-
エクセルVBAのフォームを最...
-
ACCESSのフォーム、開くんです...
-
Microsoft Formsの「個人情報や...
-
VBA(エクセル)のユーザー...
-
フォームウィンドウを最前面に...
-
ユーザーフォームのラベルに時...
-
'ユーザーフォーム右上隅の[×...
-
Excelにて、ユーザーフォームで...
おすすめ情報