- PR -

他のクラスからの描画

1
投稿者投稿内容
満月
会議室デビュー日: 2007/10/18
投稿数: 12
投稿日時: 2007-10-31 23:19
こんにちわ
Form1にOnPaintメソッドを作成し、Invalidate();で再描画というのを他クラスからするにはどうすればいいのでしょうか?

他クラスからInvalidateを行うと、
エラー CS0103: 名前 'Invalidate' は現在のコンテキスト内に存在しません。

Form1.Invalidate();とすると、
エラー CS0120: 静的でないフィールド、メソッド、またはプロパティ 'System.Windows.Forms.Control.Invalidate()' で、オブジェクト参照が必要です。

といったエラーが出てしまいます。他クラスから、Form1のOnPaintを動かすにはどうすればいいのでしょうか。。

よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-11-01 07:09
クラスではなく、インスタンスに対して行います。
満月
会議室デビュー日: 2007/10/18
投稿数: 12
投稿日時: 2007-11-04 18:31
引用:

Jittaさんの書き込み (2007-11-01 07:09) より:
クラスではなく、インスタンスに対して行います。



遅くなってしまいすみません。
フォームをインスタンス化しようと試みたのですが、うまくいきませんでした。
質問なのですが、VisualC#2005で、デザイナで既に生成されたForm1はどうすればインスタンス化するのでしょうか?

Form1上や他クラス上で
コード:

Form1 frm = new Form1();


と書いた結果、
'System.StackOverflowException' のハンドルされていない例外が テスト.exe で発生しました。
というエラーが出てしまいます。


[ メッセージ編集済み 編集者: 満月 編集日時 2007-11-04 18:32 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-11-04 20:55
描画したいクラスに描画用のメソッドを実装しておいて、そのインスタンスからそのメソッドを呼び出す方がわかりやすいでしょう。

引用:

満月さんの書き込み (2007-11-04 18:31) より:

遅くなってしまいすみません。
フォームをインスタンス化しようと試みたのですが、うまくいきませんでした。
質問なのですが、VisualC#2005で、デザイナで既に生成されたForm1はどうすればインスタンス化するのでしょうか?


その Form1 は、コード上でしっかりとインスタンスを生成しています。 エントリ ポイント周辺をご覧になってはいかがでしょう。 この機会にマルチプル インスタンスの概念はよく知っておくべきでしょう。

引用:

'System.StackOverflowException' のハンドルされていない例外が テスト.exe で発生しました。
というエラーが出てしまいます。


この例外は書いた場所が悪かっただけで直接は関係ないでしょう。 (たとえば、コンストラクタや Load イベントなどに実装すれば無限ループになってスタックが溢れます)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-11-04 21:00
引用:

満月さんの書き込み (2007-11-04 18:31) より:
Form1にOnPaintメソッドを作成し、Invalidate();で再描画というのを他クラスからするにはどうすればいいのでしょうか?
引用:

Jittaさんの書き込み (2007-11-01 07:09) より:
クラスではなく、インスタンスに対して行います。


質問なのですが、VisualC#2005で、デザイナで既に生成されたForm1はどうすればインスタンス化するのでしょうか?



インスタンスを作るなら
new Form1();
であっています。

VisualStudioなどの開発環境でWindowsアプリケーションを組むと、
初期化などのコードが隠蔽されてしまっていますのでわかりづらいのですが、
プログラムはMain関数から始まりますので、
その中でForm1のインスタンスが作られています。

引用:

Form1上や他クラス上で
コード:

Form1 frm = new Form1();


と書いた結果、
'System.StackOverflowException' のハンドルされていない例外が テスト.exe で発生しました。
というエラーが出てしまいます。



インスタンス作成中に
自分と同じクラスのインスタンスを作ろうとしてるのではないですか?

投稿内容を読む限り、
C#や.Netでのプログラミングの基礎、
オブジェクト指向プログラミングの基礎が
よくわかっていないようです。
掲示板では基礎から全部説明することはできませんので、
入門書などを用いて基礎から勉強するといいでしょう。

[ メッセージ編集済み 編集者: れい 編集日時 2007-11-04 21:01 ]
1

スキルアップ/キャリアアップ(JOB@IT)