C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■103791 / 3階層)  Visual Basicで簡易CADを作成
□投稿者/ 魔界の仮面弁士 (3871回)-(2025/07/29(Tue) 14:06:15)
No103783 (shiro さん) に返信
> Dim i As Integer
> For i = 0 To 36
このような書き方をするのは、VB.NET 2002 までです。

VB.NET 2003 以降のバージョンにおいては、For ループのカウンタ変数は事前宣言せずに
 For i As Integer = 0 To 36
のように「For ループ内でのみ使える局所変数」とすることが強く推奨されます。

さらに VB2008 以降では、初期値指定のある変数宣言時には型宣言を省略できるようになったため
 For i = 0 To 36
のように、As Integer 部分も省略する記法が一般的になりました。結果的に、現行バージョンでは
For ループのカウンタ変数は、明示的な変数宣言無しで使っているように見える書き方になっています。


> Dim pen As New Pen(Color.Black, 1)
Pen、Brush、Font などは IDisposable なオブジェクトであるため、
自身で New したものは、使用しなくなった時点で Dispose の呼び出しが必須となります。
VB2005 以降をお使いであれば Using ブロックで囲むのが良いでしょう。

すなわち、「Dim pen As New Pen(Color.Black, 1)」ではなく
 Using pen As New Pen(Color.Black, 1)
  :
 End Using
の構文にします。

ただし Dispose するのは「自身で生成したオブジェクト」に限られます。
Pens.Black や Brushed.Red などは自身で作成したものではなく、
共有オブジェクトなので、勝手に Dispose してはいけません。


Imports System.Drawing.Drawing2D
Public Class Form1
  'マス目の位置
  Private Const marginSize As Integer = 100 '左上の余白サイズ
  Private Const gridCellSize As Integer = 10 '小マスの大きさ
  Private Const gridCount As Integer = 36  '縦横の実線マスの数

  Private ReadOnly edgePos As Integer = marginSize + gridCellSize * gridCount

  Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
    Using gridPen As New Pen(Color.Black)
      '方眼を描く
      For i = 0 To gridCount
        gridPen.DashStyle = If(i Mod 2 = 0, DashStyle.Solid, DashStyle.Dot)
        Dim linePos = marginSize + gridCellSize * i
        e.Graphics.DrawLine(gridPen, marginSize, linePos, edgePos, linePos)
        e.Graphics.DrawLine(gridPen, linePos, marginSize, linePos, edgePos)
      Next
    End Using
  End Sub
End Class



No103785 (shiro さん) に返信
>>ここが参考になるかも。
>>https://www.umayadia.com/vbsample/VBdotNet-Samples201/Sample275WinFormMouseToDraw.htm
> 非常に参考になりました。
> MouseDown、MouseMoveで、ラバーバンドも上手く描けました。有難うございます。

MouseDown / MouseMove イベントは、何をどこに描くのかという「座標情報」を定めています。
座標情報が確定したところで Invaliedate メソッドを呼び出して、描画依頼を飛ばします。

Paint イベントでは、事前に定められた座標情報に従って、柱や壁やラバーバンドを描く処理だけを記述します。


> 情報提供頂いたHPには消去方法がありませんでした。
> 右クリック等で、MouseDownで描いた図形を削除するVBの方法をご存じでしたらご教授いただければ幸いです。

最後に、「クリックした図形の色を変える」サンプルがありましたよね。

あのサンプルでは Polygon クラスを自作して、
 Private polygons As New List(Of Polygon)()
で管理されていました。

今回の場合、Polygon ではなく Pillar クラスや Wall クラスを自作しているかと思いますが、
考え方としては同じです。

選択された図形を管理できるようになっているのですが、その List(Of ) コレクションから
不要な図形を RemoveAt (あるいは Remove) すれば、その図形を削除できることになります。
図形情報を Add / RemoveAt した後は、Invaliedate を呼び直すことで再描画されます。


右クリックの判定を行いたいのであれば、MouseDown イベントの段階で
 If e.Button.HasFlag(MouseButtons.Right) Then
で判定すれば良いでしょう。ちなみに、Control / Alt / Shift 判定も加えるなら
 If ModifierKeys.HasFlag(Keys.Control) Then
 If ModifierKeys.HasFlag(Keys.Alt) Then
 If ModifierKeys.HasFlag(Keys.Shift) Then
を使うことができます。
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[2]: Visual Basicで簡易CADを作成 /shiro →Re[4]: Visual Basicで簡易CADを作成 /shiro
 
上記関連ツリー

Visual Basicで簡易CADを作成 / shiro (25/07/25(Fri) 20:50) #103783
Re[1]: Visual Basicで簡易CADを作成 / KOZ (25/07/27(Sun) 14:35) #103784
  └ Re[2]: Visual Basicで簡易CADを作成 / shiro (25/07/28(Mon) 20:17) #103785
    ├ Re[3]: Visual Basicで簡易CADを作成 / kiku (25/07/29(Tue) 08:49) #103786
    └ Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/07/29(Tue) 14:06) #103791 ←Now
      └ Re[4]: Visual Basicで簡易CADを作成 / shiro (25/07/30(Wed) 12:22) #103792
        └ Re[5]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/07/30(Wed) 15:46) #103794
          └ Re[6]: Visual Basicで簡易CADを作成 / shiro (25/07/31(Thu) 07:34) #103795
            └ Re[7]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/07/31(Thu) 10:48) #103796
              └ Re[8]: Visual Basicで簡易CADを作成 / shiro (25/08/01(Fri) 06:15) #103797
                ├ Re[9]: Visual Basicで簡易CADを作成 / kiku (25/08/01(Fri) 08:47) #103798
                │└ Re[10]: Visual Basicで簡易CADを作成 / shiro (25/08/02(Sat) 03:40) #103803
                └ Re[9]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/01(Fri) 10:46) #103800
                  ├ Re[10]: Visual Basicで簡易CADを作成 / kiku (25/08/01(Fri) 10:50) #103801
                  └ Re[10]: Visual Basicで簡易CADを作成 / shiro (25/08/02(Sat) 03:38) #103802
                    └ Re[11]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/03(Sun) 11:50) #103805
                      └ Re[12]: Visual Basicで簡易CADを作成 / shiro (25/08/04(Mon) 05:10) #103806
                        └ Re[13]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/04(Mon) 11:36) #103808
                          └ Re[14]: Visual Basicで簡易CADを作成 / shiro (25/08/04(Mon) 18:59) #103811
                            └ Re[15]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/04(Mon) 19:43) #103812
                              └ Re[16]: Visual Basicで簡易CADを作成 / shiro (25/08/05(Tue) 12:42) #103814
                                └ Re[17]: Visual Basicで簡易CADを作成 / shiro (25/08/05(Tue) 12:44) #103815
                                  └ Re[18]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/05(Tue) 18:02) #103817
                                    └ Re[19]: Visual Basicで簡易CADを作成 / shiro (25/08/05(Tue) 19:28) #103819
                                      └ Re[20]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/05(Tue) 20:39) #103821
                                        └ Re[21]: Visual Basicで簡易CADを作成 / shiro (25/08/06(Wed) 12:22) #103822
                                          └ Re[22]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/06(Wed) 14:42) #103825
                                            ├ Re[23]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/06(Wed) 17:53) #103828
                                            │└ Re[24]: Visual Basicで簡易CADを作成 / shiro (25/08/06(Wed) 19:13) #103830
                                            │  ├ Re[25]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/06(Wed) 19:44) #103832
                                            │  │└ Re[26]: Visual Basicで簡易CADを作成 / shiro (25/08/07(Thu) 07:06) #103834
                                            │  │  └ Re[27]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/07(Thu) 12:18) #103835
                                            │  │    └ Re[28]: Visual Basicで簡易CADを作成 / shiro (25/08/07(Thu) 19:14) #103836
                                            │  │      └ Re[29]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/07(Thu) 20:25) #103837
                                            │  │        ├ Re[30]: Visual Basicで簡易CADを作成 / shiro (25/08/08(Fri) 03:34) #103838
                                            │  │        └ Re[30]: Visual Basicで簡易CADを作成 / shiro (25/08/08(Fri) 07:29) #103839
                                            │  │          └ Re[31]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/08(Fri) 09:40) #103841
                                            │  │            └ Re[32]: Visual Basicで簡易CADを作成 / shiro (25/08/09(Sat) 05:05) #103842
                                            │  │              └ Re[33]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/09(Sat) 14:24) #103843
                                            │  │                └ Re[34]: Visual Basicで簡易CADを作成 / shiro (25/08/09(Sat) 19:18) #103844
                                            │  └ Re[25]: Visual Basicで簡易CADを作成 / 魔界の仮面弁士 (25/08/06(Wed) 19:53) #103833
                                            └ Re[23]: Visual Basicで簡易CADを作成 / shiro (25/08/18(Mon) 12:41) #103847
                                              └ Re[24]: Visual Basicで簡易CADを作成 / kiku (25/08/20(Wed) 15:09) #103848
                                                └ Re[25]: Visual Basicで簡易CADを作成 / shiro (25/08/20(Wed) 18:35) #103849
                                                  └ Re[26]: Visual Basicで簡易CADを作成 / kiku (25/08/21(Thu) 09:03) #103850
                                                    └ Re[27]: Visual Basicで簡易CADを作成 / shiro (25/08/21(Thu) 22:01) #103851
                                                      └ Re[28]: Visual Basicで簡易CADを作成 / kiku (25/08/22(Fri) 08:45) #103852
                                                        └ Re[29]: Visual Basicで簡易CADを作成 / shiro (25/08/22(Fri) 13:20) #103853
                                                          └ Re[30]: Visual Basicで簡易CADを作成 / kiku (25/08/22(Fri) 16:45) #103854
                                                            └ Re[31]: Visual Basicで簡易CADを作成 / shiro (25/08/22(Fri) 20:33) #103855
                                                              └ Re[32]: Visual Basicで簡易CADを作成 / kiku (25/08/25(Mon) 08:42) #103857

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信