ビジュアルベーシック2008、変数とグラフィックについて

このQ&Aのポイント
  • ビジュアルベーシック2008、変数とグラフィックについて学んでいます。
  • 三目並べの勝ちと負けの回数を別のダイアログに表示するためにはStatic変数が必要ですが、うまく設定できません。
  • VBを使ってグラフを作成していますが、ボタンを押してもグラフィックが表示されません。
回答を見る
  • ベストアンサー

ビジュアルベーシック2008、変数とグラフィックについて

ビジュアルベーシック2008、変数とグラフィックについて こんにちは、いつも本当に皆様に助けられながら初心者なりにビジュアルベーシックを学んでおります。前回、三目並べの勝ち(3つ揃った場合)と負け(揃わなかった場合)の回数を別のダイアログに表示するためにはStatic変数(データを保持する変数)が必要だと教えて頂きました。それで現在Static変数を設定しているのですが 勝ちの場合 Static totalDecimal As String totalDecimal = Label1.Text = +1 三目並べと同じページに回数を記録しているコードを活用してみたのですが…うまくいきませんでした。 3つ揃ったらメッセージボックスに勝ち、と表示→違うダイアログボックスの中のラベルに1と表示としたくて何度もStaticに挑戦しているのですが…。何か良い方法はないでしょうか。 もう一つ、現在VBを使ってグラフを作っています(期末テストの課題です)なんとか日本の国旗のコードは完成したのですが、 Private Sub Button2_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Button2.Paint 以下グラフィックのコード とこれではボタンを押してもグラフィックが表示されません。Call ButtonやもしButton2がクリックされた時グラフィックを表示、など試しているのですがエラーが出てしまいます。毎度頼ってばかりで申し訳ありませんがよろしくお願いいたします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こちらで試した方法ですが、ダイアログを置きました。そして、スタティック変数の代わりに、#1のイラストのモジュールレベル変数 B を置いて(Private でも、Public でもどちらでも可能)、ダイアログ(Dialog1)の呼び出しに対して、ダイアログ内に、Label を置き、 Dialog1.Label1.Text = B Dialog1.Show() とすれば、カウントは出ます。 Reset は、B = 0 とすれば、元に戻ります。

chirosaku_v
質問者

お礼

月曜日からひたすら悩み続けようやく今日出来ました!本当にありがとうございました。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

>Static変数(データを保持する変数) Static 変数は良いのですが、 >違うダイアログボックスの中のラベルに1と表示としたくて このダイアログボックスというのは、何を意味しているのですか? Static 自体は、データの確保だけです。それを読み出すのに、ローカルのままでは取り出せません。 --Public Class Form1 Public B As Integer 'モジュールレベルの変数 -------------Sub Procedure1 Static A As Integer '<--これ自体はよいのですが、 Procedure1 の中だけです。ここから取り出すなら、以下のような、Call Procedure2(A) にして上げなくてはなりません。 それが面倒なら、B のように、モジュール・スコープレベルの変数を取って、そこでカウントしてあげなくてはりません。 -------------End Sub -------------Sub Procedure2(ByVal A As Integer) -------------End Sub --------End Class >Private Sub Button2_Paint ボタンに表示するのですか? 通常は、Form (Form1_Pain) に出しますが、そうでない場合は、PictureBox を背景と色を合わせて、イメージファイルを呼び出します。 PictureBox1.Image = Image.FromFile("pic1.bmp") 'パス名がないと、 ここになります。C:\.....\Visual Studio 2008\Projects\[ProjectName]\[ProjectName]\bin\Debug\

chirosaku_v
質問者

補足

違うダイアログボックスというのは、三目並べのゲームのページとは別に「新しくフォームやダイアログを追加する」という欄からダイアログを追加して違うページにスコアを表示したいのです。その場合だとStaticより別の変数を使うべきですか?(どこかでStaticはページ内でしか有効ではない、と見た記憶が…) >グラフの件了解致しました!ありがとうございます。

関連するQ&A

  • 変数の値について

    変数の値について教えてください。 VB2010 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim A As Single A = 2.0 MsgBox(A) End Sub 上記のプロシジャを実行するとメッセージボックスに2と表示され 2.0と表示しません。 2.0と表示させるには、どのようにすればよいなでしょうか。

  • VS2005 line

    Visual Basic 2005での質問です。 フォームが開いた時、線を一本ひくには Private Sub Form1_Paint(ByVal sender As Object, ByVal e _ As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint e.Graphics.DrawLine(Pens.Black, 0, 25, Me.Width, 25) End Sub でわかりましたが、 ボタンを一個置いて、それをクリックした時、線を一本ひくにはどうしたらいいですか。 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click XXXXX.DrawLine(Pens.Black, 0, 25, Me.Width, 25) End Sub XXXXX.の所をなんて記述したらいいのでしょうか? アクセスのVBAしか使ったことがないもので・・・

  • VB.NET フォーム上に描いたグラフィックのクリア方法

    最近、VB6からVB.NET 2003へプログラムの移行作業を始めたものです。極々基本的なことなのかもしれませんが、.NETでフォームに描いたグラフィック(線や円など)を消去するコードがなかなかうまく書けず困っています。 VB6でしたら Form**.Cls だけで消えるのですが、それに対応するコードはどのように記載すれば宜しいでしょうか? ヘルプなどで見るとClearメソッドを使用するとありましたが、どうもうまく動きません。 例えば、以下の簡単な例でしたらどのように変えれば宜しいでしょうか? 宜しくお願いいたします。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click   Dim grph As System.Drawing.Graphics   grph = Me.CreateGraphics   grph.DrawLine(Pens.Red, 50, 25, 200, 150)   ClearScreen(e) End Sub Public Sub ClearScreen(ByVal e As PaintEventArgs)   Dim BGcolor As Color   BGcolor = Color.FromArgb(0, 0, 0)   e.Graphics.Clear(BGcolor) '背景色 End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click   ClearScreen(e) End Sub

  • Visual Basicがわかりません。

    Public Class Form1 Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint Dim GraphicsFun As System.Drawing.Graphics GraphicsFun = Me.CreateGraphics Dim PenColor As New System.Drawing.Pen _ (System.Drawing.Color.Black) GraphicsFun.DrawRectangle(PenColor, 30, 30, 450, 300) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Timer1.Enabled = True End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If PictureBox1.Left < 480 - PictureBox1.Width And PictureBox1.Top + 31 Then PictureBox1.Left = PictureBox1.Left + 1 Else If PictureBox1.Top < 330 - PictureBox1.Height Then PictureBox1.Top = PictureBox1.Top + 1 Else If PictureBox1.Left > 30 Then PictureBox1.Left = PictureBox1.Left - 1 Else If PictureBox1.Top > 30 And PictureBox1.Left + 31 Then PictureBox1.Top = PictureBox1.Top - 1 End If End If End If End If End Sub End Class ピクチャーボックスを四角形の中で右周りに枠の中をボタンを押すと回るようにしたいんですけど、2回目の動作と3回目の動作がかぶってしまい、うまくいきません。4回目の解決策を教えてください。また、ボタン2を押すと反対周りにピクチャーボックスが回る、コマンドを 教えてください。

  • 三目並べのコードの続きについて。ビジュアルベーシック2008。

    三目並べのコードの続きについて。ビジュアルベーシック2008。 いつもお世話になっております。前回から三目並べのゲーム作りに苦戦しております。 今回は三目並べで、3つ揃った場合は勝ち、揃わなかったら負け、とスコアをカウントしていきたいのです。 例 勝った回数:1回 負けた回数:2回 しかし問題なのが、三目並べのゲームのある”同じページ”に表示するのではなく、新しく追加したダイアログボックスの中に表示したいのです。三目並べのページにあるラベルをダイアログボックスにCALLしたり様々に試しているのですが上手くいきません。どうかお知恵をお貸し下さい。 また前回でも触れましたが、”勝ち”と”負け”のプログラムは成功しましたが”引き分け”をどのように設定すればいいのかわかりません。地道に9つのボタンのXとOを指定して何十通りもコードを打つしかないのでしょうか。

  • クラス間(Form間?)で使える変数の設定方法(VB.NET)

    VB.net(Visual Studio)で現在プログラムの勉強をしています。 現在のスキルとしまして、変数,引数,グローバル変数,サブルーチン等を勉強しました。 残念ながら、他のプログラム言語等は勉強した事がありません。 <目的> 現在1つのアプリケーション内でForm1,Form2,Form3と作り Form1のText.Boxに入力された値を変数としてボタンを押すと各Formのラベルに 変数を渡し表示させたいと考えております。 <問題点> しかしプログラムを作っても波下線が出てプログラムのデバックが開始できません。 おそらくどこかがおかしいと思うのですが判りません。 <質問内容> 下記のサンプルの中でおかしいコードや根本からやり直す必要なコードがあれば ご教授願えますでしょうか? <サンプル> -----Form1------ Public Class Form1 Public TextBox1noNakami as strig Private Sub Button1_click(Byval sender As System.Object,Byval e AS System.EventArgs) Handles Button1_click TextBox1noNakami = TextBox1.text Form2.show() Form3.show() End Sub End Class -----Form2----- Public Class Form2 Public TextBox1noNakami as Form1 Private Sub Form2_Losd(Byval sender As System.Object,Byval e AS System.EventArgs) Handles MyBase.Load label1.text = TextBox1noNakami End Sub End Class -----Form3----- Public Class Form3 Public TextBox1noNakami as Form1 Private Sub Form3_Losd(Byval sender As System.Object,Byval e AS System.EventArgs) Handles MyBase.Load label2.text = TextBox1noNakami End Sub End Class

  • visual basic 2010 の デザイン

    visual basic 2010で、ボタンをクリックしただけ数が増えるように作ったんですけど、 9から10に切り替わるときに、位がずれてしまいます。 分かりやすくするため、*をつけると、**9*→**10 これを、***9→**10 こうなるようにしたいんです。 どうやったらできますか??? ============================================================ Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim kazu As Long kazu = Label1.Text Label1.Text = kazu + 1 End Sub End Class

  • Visual Basic初心者です。

    Visual Basic初心者です。 Button1でData Grid Viewを表示し、Data Grid Viewから更新したものを Button2でmdbの更新を行う動作をさせたいと思っております。 http://blog.livedoor.jp/akf0/archives/51536291.html を参考にさせていただいましたが、このまま実行すると 参照までは動作しますが、更新(Button2)の時点で DataAdapter.SelectCommandプロパティを初期化する必要があります。 と出てしまいます。 どなたか知恵を貸してください。よろしくお願い致します。 実行コードは下記の通りです。 Private Sub Button2_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click '更新用SQLの取得 Dim builder As SqlCommandBuilder = New SqlCommandBuilder(adapter) builder.GetUpdateCommand() builder = New SqlClient.SqlCommandBuilder(adapter) Dim result As Integer 'データの更新 result = adapter.Update(ds.Tables(0)) End Sub

  • Visual Basic 2005 クラスライブラリの使い方

    異なるクラス間で共通の変数aを使いたいのですが、うまくいきません。あるクラスForm1でaを宣言しても他のクラスClass1でも宣言しないとエラーが出てしまいます。 以下のクラスをデバイスアプリケーションとして作成し、 Public Class Form1 Public a As Integer = 100  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Test As New MyLibrary.Class1 Test.Plus1() MsgBox(a, MsgBoxStyle.Information, "実験") End Sub End Class 以下のクラスをクラスライブラリMyLibraryとして作成します。 Public Class Class1 Dim a As Integer = 0 Public Sub Plus1() a += 1 End Sub End Class Form1でボタンを押すと、メッセージボックスに100と表示されます。 (関数Plus1の効果なし) ちなみにClass1の「Dim a」を「Static a」にしてクラスライブラリ(DLL)を最初に呼び出したときだけ初期化すればよいと思ったのですが、そうすると「'Static' は、メンバ変数宣言では有効ではありません。」というエラーが出てしまいます。 解決方法をご存知の方、ご教授願います。 また、クラスライブラリ(DLL)を作成するとまとまりができてプログラムの変更がしやすいと思いますが、やはり処理速度が遅くなるなどの問題もあるのでしょうか?

  • 【VB2008】 .MouseEnter時にe.Graphics.DrawString~をする方法

     今晩は,いつも勉強させていただいております. 質問させていただきます.どうぞよろしくお願いいたします.  ボタンの文字を見やすくするため影付き文字にいたしておりますが (下のコード1になります),このボタンにMouseEnterした際に, クリックできることが分かりやすいよう影の色を変えようと思ったのですが やり方が見つけられません...  <コード1>  Private Sub Button1_Paint(ByVal sender As   Object, ByVal e As System.Windows.Forms.PaintEventArgs) _   Handles Button1.Paint     e.Graphics.DrawString("TEST", _     New Font("MS Pゴシック", 10), Brushes.Black, 81, 11)     e.Graphics.DrawString("TEST", _     New Font("MS Pゴシック", 10), Brushes.Red, 80, 10) End Sub  <トライしたコード>  Private Sub Button1_MouseEnter(ByVal sender As   Object, ByVal e As System.EventArgs) _   Handles Button1.MouseEnter     e.Graphics.DrawString("Test", _     New Font("MS Pゴシック", 10), Brushes.White, 81, 11)     e.Graphics.DrawString("Test", _     New Font("MS Pゴシック", 10), Brushes.Red, 80, 10)  End Sub  エラー「'Graphics'は'System.EventArgs'のメンバではありません」と なるのは当然だと思うのでございますが,引数「e As ~」を書き直すなどいたしましても 通りませんorz  別の方法で「.Paint時に描いた文字色はそのままで,.MouseEnter時に .ForeColorを変えれば...」などと考えましたが,ButtonのTextが .Paintで描いた文字より上にくるのでうまくできませんでした...  もしとんちんかんなご質問でしたら申し訳ございません.何かよさそうな 方法がございましたらご紹介いただけないでしょうか.  もしお詳しい方がいらっしゃいましたら,是非ともアドバイスいただきたく お願い申し上げます.

専門家に質問してみよう