![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
「VC++2008 Express Edition」の入門者です。「Invalidate」の動作で悩んでいます。
動作は、「マウスを左クリックしたところに赤印を付ける」と言う物です。
最初、以下の様に「Form1」での時には問題なく動いていました。
--------------------------------------------------------------------------------
//マウスクリック
private: System::Void Form1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
//~~~~~~~~~~~~~~
// マウス処理
//~~~~~~~~~~~~~~
Invalidate();
}
//画面描画
private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {
//~~~~~~~~~~~~~~
// 赤印を付ける
//~~~~~~~~~~~~~~
}
--------------------------------------------------------------------------------
上記では、マウスを左クリックすると赤印がすぐに付き、問題はありませんでした。
上記を「Form1」から「panel4」上に書き換えたのが下記です。
--------------------------------------------------------------------------------
//マウスクリック
private: System::Void panel4_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
//~~~~~~~~~~~~~~
// マウス処理
//~~~~~~~~~~~~~~
Invalidate();
}
//画面描画
private: System::Void panel4_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {
//~~~~~~~~~~~~~~
// 赤印を付ける
//~~~~~~~~~~~~~~
}
--------------------------------------------------------------------------------
上記では、マウスを左クリックしても赤印が書かれません。
一度別のプログラムなどに行って、赤印の場所が隠れて、またはこのプログラムWindowsを移動して、
赤印の場所を画面外に出して見えなくしてから戻った瞬間に赤印が書かれます。
上記の動作をInvalidateがしてるとは思うのですが・・・
Invalidateの使い方(updateも関係?)を教えて頂きたく、質問いたしました。
宜しくお願いいたします。
No.1ベストアンサー
- 回答日時:
どこを無効化したのかの違いにより質問の現象が起きているのでしょう
Formクラスのメソッドの中で オブジェクトの指定無しにInvalidateを呼んだ場合 FormクラスのInavalidateが実行されます
このときフォームに貼り付けたコントロール(子)まで無効にしてくれるかどうかをMSDNなどで調べてみましょう
Form1_Paintで描画した際にはMouse_Downの中のInvalidateと整合性が取れているので描画します
panel4_Paintで描画させようとする場合Mouse_Downで単にInvalidate()としただけでは panel4を無効化しないのかも知れません
Mouse_Downの中で panel4->Invalidate() などとしてみましょう
panel4->Invalidate() としたら無事に動作しました。
「クラス」や「メソッド」の意味を理解せずに作っているから悩むのですね!!
どうも有り難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- 英語 『G19 Gen5 MOS - Modular Optic System for Gen5』 の 『 1 2023/03/05 13:37
- マウス・キーボード マウスのないパソコン 9 2022/03/30 10:53
- 英語 Modular Optic System (MOS)とは、一体どの様な物の事なのかを教えてください。 1 2023/03/03 09:52
- 英語 下記の英文の日本語訳をお願いします。 1 2023/03/02 10:01
- 英語 下記の英文を日本語に訳して、その意味を教えてください。 1 2023/03/09 14:13
- デスクトップパソコン パソコンの画面が固まった感じになり マウスの矢印を持って行って左クリックしても固まりに変化が起きない 2 2022/07/20 19:46
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Windows 10 (緊急)windowsのタスクバーやアプリ?が反応しない 3 2023/03/28 05:03
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETのSendMessageを教えてく...
-
C# DataGridView のCellPaintin...
-
canvasで表示されてる画像を1...
-
音声再生/SourceDataLineの遅延
-
JAVAでの背景画像表示
-
ドラッグして矩形を描くには
-
アプレットで文字列の描画を横...
-
C# リストビューの特定のセルの...
-
iアプリで休眠モードになるとき...
-
Exception occurred during eve...
-
java.awt.peer?
-
C# 超初心者です 文字列?の削...
-
Androidのフォントサイズ(SP)と...
-
JavaScript で、ラインを引く方...
-
jQueryアコーディオンでリスト...
-
このプログラミングをどう組み...
-
エクセルVBAで、条件に一致する...
-
「タイプ初期化子が例外をスロ...
-
変数名の付け方
-
インスタンス参照でアクセスで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETのSendMessageを教えてく...
-
VB.NET フォーム上に描いたグ...
-
JAVAでの背景画像表示
-
C# DataGridView のCellPaintin...
-
C# リストビューの特定のセルの...
-
GDI+で描画した画像を消去する...
-
複数画像表示切り替え Visual c++
-
canvasで表示されてる画像を1...
-
アクセスで他アプリから復帰し...
-
Java、jPanelに描画する
-
Javaで文字の角度を変えて表示...
-
描画してもウィンドウをリサイ...
-
getGraphics()の意味を教えて...
-
Canvas等の図形を移動する時,直...
-
ドラッグして矩形を描くには
-
C#のGraphicsクラスについてです。
-
このプログラミングをどう組み...
-
画面のちらつきの原因が知りた...
-
Androidで画像の中で指定した範...
-
Labelコントロールの背景をグラ...
おすすめ情報