表示済みのフォームに描画する方法

このQ&Aのポイント
  • VB2008で表示済みのフォームにhello, worldと描画する方法を教えてください。
  • フォームのPaintイベントハンドラでFontオブジェクトを生成して描画することはできましたが、btnUpdateGraphicsText_Clickイベントハンドラでの試みは失敗しました。
  • どうすれば成功するのかわかりません。
回答を見る
  • ベストアンサー

表示済みの フォームに描画する方法?(VB2008)

約40日余りのVB.NET 初学者です。 そこで、この間の学習で意図して出来なかった諸点について質問します。 課題: 表示済みの フォームに hello, world と描画する! フォームの Paint イベントハンドラで Font オブジェクトを生成して描画。 これは出来ました。 しかし、次の試みに失敗しました。 Private Sub btnUpdateGraphicsText_Click() Handles btnUpdateGraphicsText.Click   Dim msg As String = "hello, world!"   Dim aFont As New Font("Arial", 12)   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx End Sub 一体、どうしたら成功するのかがサッパリわかりません。 宜しくお願いします。

noname#140971
noname#140971

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

  • ベストアンサー
回答No.1

'自分だったらこう…フラグ一個作っちゃって, 'その状態に応じて作るかな。 Option Explicit On Option Strict On Option Compare Binary Option Infer Off Class Q4771076A Inherits System.Windows.Forms.Form Private button1 As System.Windows.Forms.Button Private Updated As Boolean = False Shared Sub Main() Dim f As Q4771076A f = New Q4771076A() f.showDialog() End Sub Public Sub New() button1 = New System.Windows.Forms.Button() button1.Text = "更新" button1.Width = 100 button1.Top = 0 AddHandler button1.Click,AddressOf Me.Button1_Click AddHandler Me.Paint,AddressOf Me_Paint Me.Controls.Add(button1) End Sub Public Sub Button1_Click(sender As Object,e As System.EventArgs) Updated = Not Updated 'TrueならFalse,FalseならTrue Me.Refresh() End Sub Public Sub Me_Paint(sender As Object,e As System.Windows.Forms.PaintEventArgs) if Updated = True Then Dim msg As String = "hello, world!" Dim aFont As New System.Drawing.Font("Arial", 12) e.Graphics.DrawString(msg,aFont,System.Drawing.Brushes.Red,100,0) End If End Sub End Class

noname#140971
質問者

お礼

一昨日より40日間の演習を再度やり直しています。 その中で、フォームのインスタンスにラベルを追加「hello,world」。 MSDNの例文がありましたので、そこまではクリア。 が、この課題は手も足も出ませんでした。 現状では2、3%しか理解できません。 が、何とか回答を参考に成功させたいと思っています。 ありがとうございました。

関連するQ&A

  • Imports 文についての疑問!(VB2008)

    約40日余りのVB.NET 初学者です。 そこで、この間の学習で疑問に思った諸点について質問します。 疑問: Imports 文についての疑問! Imports System.Windows.Forms ' ================================================== ' グラフィックス・メソッドで "hello, world" と描画 ' ================================================== Public Class frmMain   Private Sub frmMain_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles Me.Paint     Dim msg As String = "hello, world"     Dim aFont As New Font("Arial", 12)     e.Graphics.DrawString(msg, aFont, Brushes.Black, 0, 0)   End Sub End Class Imports 文でインポートした場合の EXE は 16384 バイト。 e As System.Windows.Forms.PaintEventArgs と書いても EXE は 16384 バイト。 「ならば、Imports 文を書けばいいじゃないか?」と思います。 この辺りの事情が判りません。 私の推測は、次のようです。 ・インポート文は名前空間やクラスに置換されるとは限らない。 ・置換は全体のテキストをチェックした後に必要な限りで行われる。 しかし、真相は不明。 自分なりのスタイルとか作法とかを確立する上で多少喉に刺が刺さった感があります。 この疑問の解消に手を貸して頂ければ幸いです。

  • VB2010で、2つめのフォームを表示させると、フォームを閉じるまで1

    VB2010で、2つめのフォームを表示させると、フォームを閉じるまで1つめのフォームの操作ができないのですが、どなたか解決方法を御存じないでしょうか。 よろしくお願いします。 Form1のピクチャーボックスに描いた折れ線グラフ上のカーソル(Form11)が、 マウスの動きに合わせてグラフ線上をたどっていくようにしようとしています。 【Form1のボタンを押すと2つめのフォームを呼び出す】 Dim Mark As New Form11 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 'グラフカーソル表示 Mark.Show() 【呼び出されたフォームのコード】 Imports System.Drawing Public Class Form11 Private Sub Form2_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint 'フォームのクライアント領域のサイズを設定 Me.ClientSize = New System.Drawing.Size(20, 20) 'カーソルを描く Dim MarkPen As New Pen(Color.Red, 1) Dim g As Graphics = e.Graphics g.DrawEllipse(MarkPen, 0, 0, 20, 20) '円の描画 Me.TopMost = True '最全面 Me.TransparencyKey = Me.BackColor '透明色の設定 Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None '枠なし End Sub End Class

  • フォームに描画して表示をスクロールしたい

    非.NETユーザーだったのですが、.NETを勉強しています。 フォーム上に描画を行いたいのですが、下のモジュールを入力して、 実行した場合○と□が描画されます。 しかし、フォームの大きさ以上の描画をした場合に、表示しきれないので スクロールバーを表示したいと思っています。 HScrollBarをフォームに貼り付けてBottomに移動した後、 実行した所、描画は行われるのですがスクロールバーが効きません。 なんらかのプロパティを変更しなければならないのでしょうか。 それとも、この場合根本的にHScrollBarコントロールを使用できないの でしょうか。 Private Sub cmd描画_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmd描画.Click Dim g As Graphics Dim p As Pen Dim b As SolidBrush Dim r1, r2, r3 As Rectangle g = Me.CreateGraphics p = New Pen(Color.Red) b = New SolidBrush(Color.Blue) r1 = New Rectangle(10, 10, 50, 50) g.DrawEllipse(p, r1) r2 = New Rectangle(70, 70, 50, 50) g.FillRectangle(b, r2) r3 = New Rectangle(500, 10, 50, 50) g.DrawEllipse(p, r3) End Sub よろしくお願い申し上げます。

  • VB.NETのグラフィック描画について

    グラフィック描画ですが、引数を持たないサブルーチンプロシージャ(固定的な 目盛り等)は、PictureBox_paint(***イベントプロシージャ内に記述すればグラフィック描画ができます(e.Graphicsでグラフィックスオブジェクトを取得できる為)が、 X、Y座標を引数としたサブルーチンプロシージャを作り、その中でLineDraw(*****で描画させたい場合サブルーチンプロシージャ内に dim g As Graphics=pictureBox1.CreateGraphics() でグラフィックオブジェクトを生成しても 描画できないのですがどのようにすれば解決できるでしょうか(イメージがわかり難いかもしれませんのでサンプルを書きました) よろしくお願いします (1)private sub pictureBox1_paint(Byval sender as Object, Byval e as system****** e.Graphics.DrawLine(****** (これは描画できる) End Sub (2)private sub zahyou() ' 座標を生成するサブルーチンプロシージャ dim i as integer for i=0 to 10 hyouji( i , i*5 ) End Sub private sub hyouji( x as integer, y as integer) ’直線を引くサブルーチンプロシージャ dim g As Graphics=pictureBox1.CreateGraphics() g.DrawLine(***,x,y**** (これは描画できない)

  • VB.netで図形描画ができません^^;

    初心者質問で申し訳ないです。 VB.net(Visual Studio 2005)で図形描画を行っています。 ボタン押下で図形(四角形)を描画する方法は理解できたのですが 起動時に表示するほうほうが分かりません。 どなたか教えてもらえないでしょうか? Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim g As Graphics g = PictureBox1.CreateGraphics() g.DrawRectangle(Pens.Black, 100, 50, 100, 100) g.Dispose() End Sub 上記のようにLoadから読み込むようにしましたが描画されませんでした。 よろしくお願い致します><

  • テキストボックスに描画

    テキストボックスの上でマウスを動かすと赤い線を描画するプログラムを書きました。 Private Sub TextBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseMove Dim g As Graphics = sender.CreateGraphics() g.FillEllipse(Brushes.Red, e.X, e.Y, 5, 5) End Sub この方法の場合、フォームが再描画されると書いたものが消えてしまいます。 再描画されても消えなくて、なおかつアプリケーションをいったん終了しても復元できる方法があれば、教えてください。

  • VB2005 フォームの再表示

    プログラムを終了する時、“プログラムを終了しますか?”というメッセージを表示し“はい”ボタンを押すとプログラムを終了、“いいえ”ボタンを押すとプログラムを終了しないようにしたいのですが、“いいえ”ボタンを押すとフォームが消えてしまいます。この時プログラムは終了していません。消えているフォームを再度表示したいのですが、どうしたら良いのか分かりません。Me.Show()、Me.Refresh()とかを使用しても表示されません。現在のコードを記載しますのでどなたか教えて下さい。よろしくお願いします。 Private Sub MainDisp_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed Dim resources As System.ComponentModel.ComponentResourceManager _ = New System.ComponentModel.ComponentResourceManager(GetType(MainDisp)) Dim msg As String Dim ret As String Beep() msg = My.Resources.msg001 resources.ApplyResources(msg, "msg") ret = MsgBox(msg, MsgBoxStyle.YesNo + MsgBoxStyle.Question, My.Resources.msg002) If ret = vbYes Then End Else Me.Show() Me.Refresh() End If End Sub

  • 描画した後での塗りるぶし VB

    丸を描画後にColorDialogで指定された色で丸の範囲だけ塗りつぶすというプログラムを作っているのですが、なかなかうまくいきません。 丸は、このように描画するようにしています。 Private Sub PictureBox1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove If (e.Button = MouseButtons.Left) Then Dim g As Graphics = PictureBox1.CreateGraphics() Dim ePos As MouseEventArgs PictureBox1.Refresh() g.DrawEllipse(New Pen(Color.Black, 2), Spos.X, Spos.Y, e.X - Spos.X, e.Y - Spos.Y) ePos = e g.Dispose() End If End Sub Private Sub PictureBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown If (e.Button = System.Windows.Forms.MouseButtons.Left) Then Spos = e End If End Sub VB2010を使っています。 どなたか教えていただけるとありがたいです。よろしくお願いします。

  • VB.NET:モーダルで表示したフォームを最小化

    Form2をForm1の所有として、モーダルで表示しました。 '------------------------ Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdChildMdl.Click  'Form2を開く  Dim frmN As New Form2  frmN.ShowDialog(Me) 'MeはForm1 End Sub '------------------------ Form2が最小化された時に、親フォームであるForm1も最小化させたいと思い、 Form2のResizeメソッドに以下のようなコードを書きました。 '------------------------ Private Sub Form2_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize  Select Case Me.WindowState   Case FormWindowState.Minimized    '親フォームも最小化((1))    Me.Owner.WindowState = FormWindowState.Minimized   Case FormWindowState.Maximized    '親フォームも最大化((2))    Me.Owner.WindowState = FormWindowState.Maximized   Case FormWindowState.Normal    '親フォームも通常サイズ((3))    Me.Owner.WindowState = FormWindowState.Normal  End Select End Sub '------------------------ しかし、(2)、(3)は問題なく実行できるのですが、 (1)を実行すると、自フォーム(Form2)が閉じてしまうのです。 そういう仕様なのでしょうか? ご存知の方、教えてください。よろしくお願いします。

  • 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

専門家に質問してみよう