
「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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# テキストボックスについて
-
VS Treeview のデザイン変更
-
C# DataGridView のCellPaintin...
-
Java、jPanelに描画する
-
p5.jsを使っているのですが
-
「タイプ初期化子が例外をスロ...
-
中学のクラス数
-
【sendkeysメソッドが動かずに...
-
インスタンス参照でアクセスで...
-
ヒグマを撃退
-
private static という変数の修飾
-
VBScriptからストアドプロシー...
-
String.containsの反対機能はあ...
-
どこからも呼ばれていない無意...
-
eclipse-Tomcatでのデバッグに...
-
サーブレットコンテキストの意...
-
javascriptのイベント処理につ...
-
VB.NET getとsetの概念がわかり...
-
C#において、同じインスタンス...
-
ラジオボタンの選択判定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JAVAでの背景画像表示
-
SwingとEDT(イベントディスパッ...
-
VB.NET フォーム上に描いたグ...
-
Labelコントロールの背景をグラ...
-
C# DataGridView のCellPaintin...
-
Javaで文字の角度を変えて表示...
-
Java、jPanelに描画する
-
canvasで表示されてる画像を1...
-
javascriptのライブラリーで、...
-
画面のちらつきの原因が知りた...
-
JOGLで描画した立方体の中心座標
-
Java Script 色を塗れるプログ...
-
C# リストビューの特定のセルの...
-
VB.NETのSendMessageを教えてく...
-
Canvas等の図形を移動する時,直...
-
このプログラミングをどう組み...
-
ドラッグして矩形を描くには
-
GDI+で描画した画像を消去する...
-
重なった要素上でのイベントで...
-
getGraphics()の意味を教えて...
おすすめ情報