Vb.netのグローバル変数の宣言の仕方の質問

このQ&Aのポイント
  • VB.net2012でのグローバル変数の宣言方法についてわからないことがあります。モジュール内でpublic hoge as string="aaa"と宣言する方法と、public hoge as stringと宣言し、フォーム起動時にhoge="aaa"と宣言する方法との違いは何でしょうか?
  • hogeの変数を変更したい場合、モジュール内でpublic hoge as string="aaa"と宣言する方法と、public hoge as stringと宣言し、フォーム起動時にhoge="aaa"と宣言する方法とでは動作が異なるようです。具体的な違いを教えていただけないでしょうか?
  • VB.net2012でのグローバル変数の宣言方法について質問です。モジュール内でpublic hoge as string="aaa"と宣言する方法と、public hoge as stringと宣言し、フォーム起動時にhoge="aaa"と宣言する方法とではどういった違いがあるのでしょうか?具体的な動作の違いを教えてください。
回答を見る
  • ベストアンサー

Vb.netのグローバル変数の宣言の仕方の質問

こんばんわ! VB6.0からの移行でVB.net2012に挑戦中なんですが、グローバル変数の宣言の仕方で分からないことがあり質問しに着ました! 内容 モジュール内で public hoge as string="aaa" と宣言するのと モジュール内で public hoge as string と宣言しておいて フォーム起動時に hoge="aaa" と宣言するのにどのような違いがあるのでしょうか? hogeの変数を変更したいのですが、上記の方法だと動いて、下記の方法だと動かないのですが・・・ まだ良く分かっていないので、程度の低い質問で申し訳ないのですが、アドバイスのほどよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.3

> グローバルで変数として一箇所のみで宣言しているのですが、それで別の変数になることはあるのでしょうか? hoge が本当は text とかなら有り得ます。この場合、フォームの Text プロパティが変更されます。 別のクラスなどを Imports していて、そちらに同名の変数がある場合も有り得るかも知れません。 ただし、スコープが同じ変数が複数あると↓文法エラーが出るはず。 http://msdn.microsoft.com/ja-jp/library/856b0w3t(v=vs.110).aspx http://msdn.microsoft.com/ja-jp/library/03x63w1z(v=vs.110).aspx 上記の現象の確認には、変数を使用している場所で右クリックメニューから「定義へ移動」で その変数がどこで宣言されたものを参照しているか分かります。 変数のスコープが狭いものが優先して使用されるため、ローカル宣言や、自分が定義していなくとも 既に VB.NET で宣言されているものとかぶってはだめです。 >意味合い自体は同じであると認識しているのですが、あっていますか? 変数宣言は同じで、初期値が違います。…見たまんまだと思いますが。 >「 public hoge as string」と宣言したhoge >動かないのは配列の項目数(例えば、hoge_arra(hoge)のように)使用しているのですが 配列の添字を文字列型にするなど話になりません。問題外です。 数値型にして下さい。

osarusan0214
質問者

お礼

定義へ移動は便利ですね^^ 使わせてもらいますw >変数宣言は同じで、初期値が違います。…見たまんまだと思いますが。 ですよね~そのはずなのに動かないです・・・。 >「 public hoge as string」と宣言したhoge はミスですw失礼しましたw実際はintegerで宣言してますw 色々試して、初期値を入れておいて、改めて別の数値をいれると動いたので、それでやってみます。 本当にナンなんだろう・・・

その他の回答 (3)

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.4

>色々試して、初期値を入れておいて、改めて別の数値をいれると動いたので、それでやってみます。 つまり変数の宣言の問題ではなくて、初期値の設定の問題だという事ですよね。 フォームのロード前か、フォームのロード時でも初期値の設定のコードの実行前に 使用しているということでは? モジュール側で配列をグローバル宣言してると、モジュールが呼ばれた際に初期化の 処理が全て走ってしまうからフォームのロードイベントに書いてある初期値設定の コードを実行する前にモジュール側で初期化しようとしているとか。 プログラムの開始から1行1行ステップ実行すれば分かるのでは?

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.2

#1 さんに追加で、 (起動しているフォームのインスタンスが違うなどの理由で) そもそも処理が実行されていない可能性もあります。 ブレークポイントを設定して処理が実行されている事は 確認しましたか?

osarusan0214
質問者

お礼

処理の実行までは確認できているのですが、ダメですね~。 なぜかエラーが・・・ 意味合い自体は同じであると認識しているのですが、あっていますか?

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

・form起動より先にhogeを参照するような、動作になっている ・名前空間が違うなどで、「 public hoge as string」と宣言したhogeと、「フォーム起動時にhoge="aaa"」とは別の変数になっている などが考えられます。 「動かない」とは具体的にどのような状態なのでしょうか?

osarusan0214
質問者

お礼

・form起動より先にhogeを参照するような、動作になっている なっていないんですToT ・名前空間が違うなどで、「 public hoge as string」と宣言したhogeと、「フォーム起動時にhoge="aaa"」とは別の変数になっている グローバルで変数として一箇所のみで宣言しているのですが、それで別の変数になることはあるのでしょうか? 動かないのは配列の項目数(例えば、hoge_arra(hoge)のように)使用しているのですが、エラーが出ます・・・

関連するQ&A

  • VB.NETで変数の宣言が上手くできません

    VB.NETで変数の宣言が上手くできません プロパティを使用し、変数の内容を一括保存しようと考えています その為に以下のようなコードを書いたのですが他のフォームから宣言されていないとなってしまいます 修正点を教えて頂けると嬉しいです Setting.vb Pubic class Settings Public dbdirectry As String Public flistpass As String Public Property flist () As String Get Return flistpass End Get Set (Byval Value As String) flistpass = Value End Set End Property もう一つflist () をdbdic ()に flistpassをdbdirectryにしたもの End Class この変数2つに他のフォームMainForm1.vbとDefaultSetting.vbなどからflistpass = Newflistpassなどと記述するとアクセス出来ず宣言していない扱いになります Publicでの宣言で大丈夫だと思ったのですが間違えているのでしょうか?

  • VB2010で、変数の宣言がわかりません。

    VB2010で、変数の宣言がわかりません。 Option Explicit Public i, j, k, l As Long Public ii, jj, kk, ll As Long Public lngFileSuu As Long Public strTemp As String ・ ・ ・ と標準モジュールに宣言すると エラーがでています。 VB6.0とは宣言方法が違うのでしょうか? 教えてください。よろしくお願いします。

  • VB.Netの大域変数

    VB6ではイベント制御のため、共通モジュールに大域変数を Public gFlag As Integer のように記述していました。 最近になってVB.Netをはじめましたが、この大域変数がうまく動いてくれません。 とりあえずVB6の共通モジュールはクラスを追加して行うとあり、 クラスを追加して、そこで上記のようにPublicで宣言しました。 ところがFormのコードで使うと宣言されていませんと出ます。 そこで色々と調べてPublicは外部に公開されるメンバ??らしい ということは分かったのですが、クラス自体さっぱりです。 とりあえずクラスのお勉強は後回しにするとして、 大域変数はどのようにすれば使えるようになるのか教えて下さい。

  • モジュールレベルで宣言した変数の値について

    WinNT4SP6 & VB6のSP4の環境です。 例えばfrmUserIDというフォームがあり、このフォームだけで有効なモジュールレベルの変数を、次のように宣言します。 Private sPassword As String 他のフォームから、このfrmUserIDフォームを開き、このfrmUserIDの中で値を設定したとします。 sPassword = "SHOW1234" Unload MeでfrmUserIDフォームを閉じて、元のフォームに戻ります。 もう一度、他のフォームからfrmUserIDフォームを開いた場合、sPasswordという変数には、先程設定した値がそのまま残っています。 私は、フォームのUnloadと共に、モジュールレベルの変数もメモリから開放されるものと考えていましたが、こういうものなんでしょうか?

  • 実際に宣言した変数を使ってない場合

    vbaです。 標準モジュール内で Public str tmp As String 等で宣言しているのに、 実際に宣言した変数を使ってない場合があるのですが それを見つけ出すことはできますか? 宣言だけしていて使ってない変数が知りたいです。 ひとつずつ検索していくしかないのでしょうか?

  • VB6の変数宣言について

    VB6で変数を宣言するときにいちいち新しいプロシージャのたびに新しく宣言しなおすのがすごく不便です。 Dim A As Integer A = 12345 と毎回宣言すると見た目も悪いですしいろいろと不便です。 どのプロシージャにも A と書けば必ず 12345 を呼び出してくれるようにはできないのでしょうか?

  • Excel にて変数の宣言の仕方

    Excel2002を使用しています。 標準モジュール内で下記のように変数を宣言すると Dim i,k as long (例)kには、あるセルの値を取得します。10000 Keta=len(k) この結果、ketaには、「4」という結果になります。 10000なので、「5」が返らないといけないのですが、うまくいきません。 ところが、 Dim i ,k ,m as long このように変数kの後ろに他の変数(今回はm)を記載すると、 「5」という結果が返ってきます。 変数の宣言の仕方が間違っているのでしょうか? よろしくお願いいたします。 ちなみに、 Dim k as long としても、「4」の結果が返ってきました。 同じ行に他の記載をしないとうまくいかないようです。。。

  • 複数のフォーム間での変数宣言

    VB6.0についての質問です。ひとつのプロジェクトの中に複数のフォームがあるとします。この中のある一つのフォームで変数 NUM を宣言し、何かの計算値を入れます。このNUMを値は保持したまま、他のフォームで利用することはできるのでしょうか? とりあえず全てのフォームのコードの先頭(プロシージャの外、Option Explicit下)に「Public NUM As Single」と宣言して挑戦してみたのですが、駄目でした。。よろしくお願いします。

  • VBA モジュールで共通に使う変数の宣言方法

    VBAにてプログラミングを覚えている者です。 現在、いくつかのモジュールがあり、それぞれDimにて宣言している共通の変数があります。 いくつものプロシージャに毎回宣言せず、どこかでひとまとめにしたいと思い、色々と調べています。 例えば、 Dim pic1 As Picture Dim cell1 As String Dim pass1 As String Dim pic2 As Picture などです。 Dimのほかに、Publicの宣言などがありますが、いま一つ使い方がピンときません。 共通宣言する変数をひとつのモジュールとして登録し、活用できると、いざ変更となったときに その内容だけ置き換えればいいと思うのですが、みなさんはどのように宣言をしていますか? (例えば、Stringなどは各モジュールで変更するのが大変だと思うのですが・・・) ヒントを教えていただければと思います。よろしくお願いします。

  • 標準モジュールにpublicで宣言するしかない?

    フォームモジュールと標準モジュールで同じ変数を使って値を行き来したい場合、 標準モジュールにpublicで宣言するしかないのでしょうか? 【フォームモジュール】 Private Sub cmd_コマンド0_Click() test = "aaa" Call 標準モジュールtest End Sub 【標準モジュール】 Public test As String Sub 標準モジュールtest() MsgBox test End Sub でいいのですか?