Shapeが表示されない

タグの編集
投稿者 FC  (社会人) 投稿日時 2023/8/2 17:41:46
vb6からvb2022に移行する作業をしています。
下記についてご教示願います。

2022に移行した際にMicrosoft.VisualBasic.PowerPacksがなくエラーが発生していたので
参照追加したらエラーが解消されたのですがShapeが表示されません。

記述は下記のみになります。
Public WithEvents Shape1 As Microsoft.VisualBasic.PowerPacks.RectangleShape
Me.Shape1 = New Microsoft.VisualBasic.PowerPacks.RectangleShape()

Me.Shape1.BackColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer))

Me.Shape1.BackStyle = Microsoft.VisualBasic.PowerPacks.BackStyle.Opaque
Me.Shape1.BorderColor = System.Drawing.SystemColors.WindowText
Me.Shape1.FillColor = System.Drawing.Color.Black
Me.Shape1.Location = New System.Drawing.Point(200, 500)
Me.Shape1.Name = "Shape1"
Me.Shape1.Size = New System.Drawing.Size(100, 100)
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/8/3 00:31:44
> 2022に移行した際にMicrosoft.VisualBasic.PowerPacksがなくエラーが発生していたので
VS2019 までは、開発環境が 32bit だったのですが
VS2022 からは 64bit になったこともあり、
 LineShape
 OvalShape
 RectangleShape
については、デザイナ 画面のサポートを受けられなくなりました。

今となっては、RectangleShape の利用は避けることをお奨めします。
まぁ、デザイナサポートを諦めて、手動でコーディングする分には使えなくも無いのですが…。


> 参照追加したらエラーが解消されたのですがShapeが表示されません。
そのライブラリをどこから入手しましたか?

VB2013 以降向けの Visual Basic PowerPacks 12.0 であれば下記から入手できますが、
こちらは Microsoft.VisualStudio.Shell.9.0 に依存していることもあり、VS2022 では使えません。
http://go.microsoft.com/fwlink/?LinkId=321343

nuget からだと
https://www.nuget.org/packages/VisualBasic.PowerPacks.Vs/
というのがあります。これは Visual Basic PowerPacks 10.0 相当のものであり、
やはり VS2022 からだとデザイン時サポートがありません。
(DataRepeater や PrintForm は追加されますが)

Microsoft.VisualBasic.PowerPacks.Vs (9.0) であれば、
VS2022 でも動作する可能性がありますが、いずれにしても現時点での入手は困難でしょう。
C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\VBPowerPacks\ja\VisualBasicPowerPacksSetup.exe


> 参照追加したらエラーが解消されたのですがShapeが表示されません。
Location や Size は指定されていますが、
実際にフォーム上に配置し忘れているのだと思います。
ShapeContainer が存在するかどうか、再確認してみてください。

Me.Controls.Add(Me.ShapeContainer1)
Me.ShapeContainer1.Shapes.Add(Me.Shape1)
投稿者 FC  (社会人) 投稿日時 2023/8/3 09:22:13
回答ありがとうございます。
Visual Basic PowerPacks 10.0 を参照追加しました。
デザイナ 画面のサポートを受けられないとのことなので何か代替案を考えます。

Me.Controls.Add(Me.ShapeContainer1)が未記入だったので追加したのですが表示はされませんでした。

下記は記入済み
ShapeContainer1.Shapes.AddRange(New Microsoft.VisualBasic.PowerPacks.Shape() {Me.Shape1,Me.Shape2}


投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/8/3 10:37:58
画面解像度は 100% ですか? それとも 125%、150% などの高解像度環境ですか?

手元の環境で、VisualBasic.PowerPacks.Vs を nuget して、
VS2022 上で試しましたが、最初の質問にあった Shape1 が
指定された通りの座標に表示されています。

Public Class Form1
    Public WithEvents Shape1 As Microsoft.VisualBasic.PowerPacks.RectangleShape
    Protected Overrides Sub OnLoad(e As EventArgs)
        Me.Shape1 = New Microsoft.VisualBasic.PowerPacks.RectangleShape()
        Me.Shape1.BackColor = System.Drawing.Color.FromArgb(CType(CType(255, Byte), Integer), CType(CType(255, Byte), Integer), CType(CType(192, Byte), Integer))
        Me.Shape1.BackStyle = Microsoft.VisualBasic.PowerPacks.BackStyle.Opaque
        Me.Shape1.BorderColor = System.Drawing.SystemColors.WindowText
        Me.Shape1.FillColor = System.Drawing.Color.Black
        Me.Shape1.Location = New System.Drawing.Point(200, 500)
        Me.Shape1.Name = "Shape1"
        Me.Shape1.Size = New System.Drawing.Size(100, 100)

        Dim ShapeContainer1 As New Microsoft.VisualBasic.PowerPacks.ShapeContainer()
        ShapeContainer1.Shapes.Add(Me.Shape1)
        Me.Controls.Add(ShapeContainer1)

        MyBase.OnLoad(e)
    End Sub
End Class