DOBON.NET DOBON.NETプログラミング掲示板過去ログ

フォームに図形を描きたい

分類:[.NET]

はじめまして初の掲示板書き込みになります。
.NETを昨日からやりだしたのですが、VB6でShapeコントロールがあり、
貼り付ければ制御可能でしたが、.NETではコントロールが無くなり、
理解できなくなりました。どぼんVBさんの所ではPictureコントロールを
貼り付けてと言うことでできると思うのですが、Pictureを使用せず、
単なるFormに直接コードを書けないのでしょうか?
Graphics系だとは思っているのですが。。。

単純なことだとは思いますが、よろしくお願いいたします。
■No216に返信(MASAさんの記事)
> 単なるFormに直接コードを書けないのでしょうか?

こんにちは、MASAさん。ピラルクです。
私もはじめて書き込みます。(^^)

図形がどれぐらい込み入ったものかにより、
手法は変わると思いますが一例はこうです。

Private Sub Form1_Paint(ByVal sender As Object, ByVal pe As PaintEventArgs) Handles MyBase.Paint
Dim g As Graphics = pe.Graphics

'描画位置
Dim rect As New Rectangle(30, 30, 180, 30)

'赤枠の四角を描画
g.DrawRectangle(Pens.Red, rect)
'ズラして青塗りの四角を描画
rect.Offset(0, 50)
g.FillRectangle(Brushes.Blue, rect)
'ズラして緑線の円を描画
rect.Offset(0, 50)
g.DrawEllipse(Pens.Green, rect)
'ズラして黄塗りの円を描画
rect.Offset(0, 50)
g.FillEllipse(Brushes.Yellow, rect)
End Sub

※ g は Me.CreateGraphics からも取れる。
ただし、Paintのタイミングで書かないと、他の窓が重なった時に
消してしまう。
返事が遅れましてすみません。ピラルク様ありがとうございます。
さて早速ピラルクさんの方法を取りまして、Form_Paintに書いたのですが、
エラーとなります。

Private Sub Form1_Paint(省略します。) Handles MyBase.Paint
Dim g As Graphics = pe.Graphics
'描画位置
Dim rect As New Rectangle(30, 30, 180, 30)

'赤枠の四角を描画
g.DrawRectangle(Pens.Red, rect)
'ズラして青塗りの四角を描画
rect.Offset(0, 50)
g.FillRectangle(Brushes.Blue, rect)
'ズラして緑線の円を描画
rect.Offset(0, 50)
g.DrawEllipse(Pens.Green, rect)
'ズラして黄塗りの円を描画
rect.Offset(0, 50)
g.FillEllipse(Brushes.Yellow, rect)
End Sub

と書き込んだのですが、1行目のGraphicsに、プログラムを
書き込んでいるときに波線が出ます。実行するとエラーに
なります。

formには何も置いてもいなければ何もしておりません。
他にソースコードは一切無いため間違えるとは思えないのですが
なぜGraphicsは波線が出ているのかわかりません。

なぜなのでしょうか?インストールが失敗しているのでしょうか?

Windows2000(SP4)
VB.NETで作成
VisualStadio.NET Version2003
> Private Sub Form1_Paint(省略します。) Handles MyBase.Paint
> Dim g As Graphics = pe.Graphics
:省略
> と書き込んだのですが、1行目のGraphicsに、プログラムを
> 書き込んでいるときに波線が出ます。実行するとエラーに
> なります。

波線の警告内容はなんと出ているのですか?
波線は文法上のエラーチェックですから、実行するまでもなく問題がある場合にでます。

また、実行するとエラーとありますが、
何とエラーがでているのですか?

単にエラーがでたではなく、何と言うエラーがでたのか書くようにしましょう。

予想ですが、コードの先頭に
Imports System.Drawing
が抜けているのではないですか?

例えば、Graphicsクラスは正式にはSystem.Drawing.Graphicsクラスです。
コード内で単にGraphicsと書いた場合にはどこのGraphicsクラスなのか
コンパイラにはわからないので、省略表記をするにはImports文による
使用する名前空間の指定が必要です。
よねKENさんありがとうございます。

> 単にエラーがでたではなく、何と言うエラーがでたのか書くようにしましょう。
誠に失礼いたしました。エラー内容を書き忘れておりました。
波線の箇所に、マウスを近づけると、「型が必要です。」と
表示されます。また、実行しようとすると、コンパイルエラーで、再度
「型が必要です。」と出ます。

> 予想ですが、コードの先頭に
> Imports System.Drawing
> が抜けているのではないですか?
Imports System.Drawingをコードの先頭に書き込んでも変わらず、
form1_Paint無いにImports System.Drawingと先頭に書き込んでも
構文エラーですと出ます。

> 例えば、Graphicsクラスは正式にはSystem.Drawing.Graphicsクラスです。
> コード内で単にGraphicsと書いた場合にはどこのGraphicsクラスなのか
> コンパイラにはわからないので、省略表記をするにはImports文による
> 使用する名前空間の指定が必要です。

どうも.NETは難しくなってしまったようで。。。いろいろこちらでも検証中では
有りますが、解決策が見出せず、困っております。もうしばらくやってみようと
思います。
Dim g As Graphics = pe.Graphics

Dim g As Graphics = Me.CreateGraphics
に変更すればOKですよ。
ピラルク様、よねKEN様、そしてとろんさん
いろいろな情報ありがとうございます。

最初、とろんさんが言われたMe.CreateGrafhicsに
変更したところ、同じように「型が必要です。」と
同じエラーになりまして、あきらめモードになって
おりました。もうどうにもできないため、
友人のパソコンで動作しているプログラムを
ソースごとお借りし、実行した所、同じように
「型が必要です。」となりました。
友人のところで動いていて、私のところで動かない
のは、しいて言うなれば、パソコンが違うぐらいなので
Visual Stadio.NET 2003を再度、何時間かかけて
再インストールしてみました。

すると普通に動作していました。このGraphics以外にも
データーベースADO.NETってやつを試そうとしていて
途中ですが、そこまでは普通に動作しており、唯一
データーベースプログラムにGraphicsを使用していな
かったので気がつきませんでした。

特にインストール時にエラーで止まったなど無いため
原因が確定できませんが、再インストールしたことで
まったく問題なく動作いたしました。

プログラム開発以外の場所での問題のようで、
誠にご迷惑おかけいたしました。

また、何かありましたら皆さんのお力をお借りすることに
なると思いますが、よろしくお願いいたします。
解決済み!
> 友人のパソコンで動作しているプログラムを
> ソースごとお借りし、実行した所、同じように
> 「型が必要です。」となりました。

これは.vbファイルだけでなく、プロジェクト/ソリューションファイルも
一緒に丸ごともらったのでしょうか?

Imports文をコードの先頭に加えても駄目とのことなので、
System.Drawing.dllへの参照設定がなくなっているためではないかと思います。

プロジェクト/ソリューションファイル等も含めて丸ごともらった
ソースで動かないのであれば、環境がおかしくなっているのかもしれませんが、
そうではなく.vbだけを利用していたのであれば、
何らかのはずみでSystem.Drawing.dllへの参照設定をはずしてしまっていた
可能性も考えられるかなと思います。

#単純に新規にアプリ作成をはじめた場合、デフォルトで
#System.Drawing.dllなどは参照設定されています。

インストールしなおして、今は動作するとのことですが、
試しに参照設定からSystem.Drawing.dllをはずしてみて下さい。
同じエラーメッセージがでるはずです。
#開発環境は持っていないので試していませんが
■No234に返信(よねKENさんの記事)
> これは.vbファイルだけでなく、プロジェクト/ソリューションファイルも
> 一緒に丸ごともらったのでしょうか?
>
> Imports文をコードの先頭に加えても駄目とのことなので、
> System.Drawing.dllへの参照設定がなくなっているためではないかと思います。
>
> プロジェクト/ソリューションファイル等も含めて丸ごともらった
> ソースで動かないのであれば、環境がおかしくなっているのかもしれませんが、
> そうではなく.vbだけを利用していたのであれば、
> 何らかのはずみでSystem.Drawing.dllへの参照設定をはずしてしまっていた
> 可能性も考えられるかなと思います。

プロジェクト/ソリューションファイルを丸ごともらってやりました。
VS.NET 2003の際インストールしたら問題ないのでインストールに
失敗したのか、今となっては難しいのですが。。。

後からわかったのですが。。。新しいプロジェクトの作成って時のファイル名を
Graphics関係だから、「Graphics」としてプロジェクトを作成しました。
するとやはり同じような現象がおきました。

プロジェクト名に関数に関する名前をつけたのが原因だったような気がします。
お騒がせいたしまして誠にすみませんでした。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板