none
初心者です。VB2010でDim g As Graphicsとやるとエラー(型が必要です)になります。 RRS feed

  • 質問

  • 初心者です。VB2010でDim g As Graphicsとやるとエラー(型が必要です)になります。

    Dim g As Drawing.Graphicsにすると解決します。

    Dim g As Graphicsは、VB2008の初心者用のテキストに書いてあったものです。

    VB2010で何か変わったのですか?それとも私の環境がいけないのでしょうか?(Windows7+VB2010 express)

    2010年10月27日 0:56

回答

  • 外池と申します。

    「Graphics」という語(正確に言うと識別子)を、作っておられるプログラムのどこかで定義していませんか?

    例えばですが、プログラムそのものの名前を「Graphics」にしているとか? 私の環境(Visual Studio 2005のVB)でも症状は再現しますよ? この場合、ルート名前空間がデフォルトで「Graphics」になることが原因で、そのようなエラーが出ます。

    特に差し支えないはずですので、「My Project」でルート名前空間を別の名前にしてみてください。


    (ホームページを再開しました)
    • 回答としてマーク arigirisu 2010年10月27日 4:39
    2010年10月27日 4:23

すべての返信

  • テキストに、ファイルの先頭に下記の一文を書くように指示されていませんか?
    Imports分を書くことで、その前の部分を省略して宣言できます。
    ちなみに、書かなければ事前に追加されているものではありません。(VS2008/VS2010で確認)

    Imports System.Drawing

    2010年10月27日 1:17
  • 早速の回答ありがとうございます。

    先頭にImports System.Drawingを追加しましたが解決しません。

    また、テキストにも「ファイルの先頭に下記の一文を書くように」の指示はありません。(但しテキストはVB2008用)

    Imports System.Drawing
    Public Class Form1
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            Dim g As Graphics = PictureBox1.CreateGraphics
            g.DrawLine(Pens.Red, 0, 0, 100, 200)

        End Sub
    End Class

    エラーの説明は、「型が必要です。」で、As GraphicsのGraphicsのところに波下線が付きます。

    波下線にマウスポインタを持ってくると「!」マークがあらわれ、そこにポインタを合わせると「エラー修正のオプション」というのが出てきて、何通りかの候補があり、その最初に「GraphicsをDrawing.Graphicsに変更します」というのがあり、そこをクリックすると問題解決します。

     

    2010年10月27日 3:54
  • 確認してみましたが、VS2010 でも変わっていないようでした。
    arigirisu さんのところでも、プロジェクトの新規作成時に「Windows フォーム アプリケーション」を選択されていると  Drawing は省略できると思いますが、たぶん「コンソール アプリケーション」や「クラス ライブラリ」などの別のものを指定されたんじゃないでしょうか?

    その場合、次の手順で省略できるようになります。
    (2はされましたけど、1の方もしてください。)

    1. メニューの [プロジェクト]→[参照の追加] で [.NET] タブを開き、「System.Drawing」を追加する。
    2. コードの先頭に Imports System.Drawing と記述する。


    以下はもう少し詳細な話です。

    型名の前にある「Drawing」は名前空間といいます(完全名は System.Drawing です)。

    名前空間は「Imports ステートメント」を利用することで、コード上で省略できるようになります。
    ただし、Imports する前提として、その名前空間を含むアセンブリ(dll ファイルのようなもの)が「参照設定」されている必要があります。

    参照設定されていれば、自分で Imports を書く代わりに、プロジェクトのプロパティの [参照] タブの [インポートされた名前空間] の一覧にチェックを付けることでも同じ結果になります。

    「Windows フォーム アプリケーション」の場合には、System.Drawing が自動的に参照に追加されますし、上記一覧上の System.Drawing に自動的にチェックがついていますので、自分で Imports ステートメントを書かなくてもコード上で Drawing が省略できますが、「コンソール アプリケーション」などの場合にはどちらも自動的には行われませんので、各自で対応が必要です。
    自動的に設定されないのは、通常「コンソール アプリケーション」の場合は、あまり Drawing を使うことがないからです。

    これでもダメでしたらすみません。
    > そこをクリックすると問題解決します。
    と書かれているので、解決済みでしょうか。

    2010年10月27日 4:19
  • 外池と申します。

    「Graphics」という語(正確に言うと識別子)を、作っておられるプログラムのどこかで定義していませんか?

    例えばですが、プログラムそのものの名前を「Graphics」にしているとか? 私の環境(Visual Studio 2005のVB)でも症状は再現しますよ? この場合、ルート名前空間がデフォルトで「Graphics」になることが原因で、そのようなエラーが出ます。

    特に差し支えないはずですので、「My Project」でルート名前空間を別の名前にしてみてください。


    (ホームページを再開しました)
    • 回答としてマーク arigirisu 2010年10月27日 4:39
    2010年10月27日 4:23
  • 外池様、解決しました。ありがとうございました。すっきりしました。

    ソリューションの名前を「Graphics」にしていました。

    名前を変えたらエラーが出なくなりました。

    また、ご回答いただきましたTH01様、Chuki様、初心者にお付き合いいただきありがとうございました。

    2010年10月27日 4:45
  • よかったですー。ただ、老婆心ながら

    「本に書いてある通りにプログラムしてエラーが出なくなったからすっきりした」では心もとないので、識別子(クラスの名前や変数の名前など)の「名前解決」というものの仕組みを、そのうち、できれば、勉強して納得できるようにしてください。

    少し複雑なプログラムを書き始めると、同様のトラブルが頻出する可能性がありますので。

    外池


    (ホームページを再開しました)
    2010年10月27日 4:58