

サブフォーム内にいくつかのグループを設けて、それらボックス内にテキストやラベルなどを作りたいです。入力フォームを作るイメージです。

今回問題となっている部分のコードは下記になります

[code]

    # サブフォーム
    $optionform = New-Object System.Windows.Forms.Form
    $optionform.StartPosition = "CenterScreen"
    $optionform.Size = New-Object System.Drawing.Size(500,500)
    $optionform.MaximizeBox = $False
    $optionform.MinimizeBox = $false
    $optionform.text = "オプション"
    $optionform.Owner = $form # $formはメインフォーム
    
    # 略：クロージングイベントやクリックイベントなど
    
    # グループ1
    $Group1 = New-Object System.Windows.Forms.GroupBox
    $Group1.Location = New-Object　System.Drawing.Point(10,10)
    $Group1.size = New-Object System.Drawing.Size(220,115)
    $Group1.text = "グループ1"
    $optionform.Controls.Add($Group1)
    
    ## グループ1：ラベル1
    $Label1 = New-Object System.Windows.Forms.Label
    $Label1.Location = New-Object System.Drawing.Point(15,20)
    $Label1.Size = New-Object System.Drawing.Size(55,20)
    $Label1.Text = "ラベル1"
    $Group1.Controls.Add($Label1)
    
    ## 略：ほかにもテキストやコンボボックスがあります
    
    # グループ2
    $Group2 = New-Object System.Windows.Forms.GroupBox
    $Group2.Location = New-Object System.Drawing.Point(235,10)
    $Group2.size = New-Object System.Drawing.Size(220,115)
    $Group2.text = "グループ2"
    $optionform.Controls.Add($Group2)
    
    ## グループ2：テキストボックス1
    $textBox1 = New-Object System.Windows.Forms.TextBox
    $textBox1.Location = New-Object System.Drawing.Point(240,20)
    $textBox1.Size = New-Object System.Drawing.Size(55,20)
    $Group2.Controls.Add($textBox1)
    
    ## 略：ほかにもテキストやコンボボックスがあります
    
[/code]

これを実行するとGroup1とGroup1内に配置しているラベル類とGroup2は表示されます。しかしGroup2内に配置しているテキスト類は表示されません。

2点試したことがあります。  
1つ目は、Group2内に配置予定のテキスト類をGroup1内に配置するように書き換えてGroup1のサイズを大きくしたことです。この場合は問題なく表示されました。  
2つ目は、Group2自体を消して、サブフォームである$optionformに直接配置したことです。この場合も、問題なく表示されました。

以上から、Group2の配置?コードの書き方?に問題があるのではと考えているのですが、問題の箇所が見当もつかず手詰まりです。  
これは何が問題なのでしょうか。  
よろしくお願いします。


CC BY-SA 4.0
2022-11-21T05:16:48.060
92340
2022-11-21T12:13:36.470
48769
question
powershell
PowerShellのGroupBox内にラベルやテキストボックスが表示されない


New-Object System.Drawing.Point()の理解が間違っていたようです。  
どのGroupBoxでも基準（Point(0,0)）は必ず左上かと思っていたのですが、ラベルやテキストの配置は、あくまで配置するGroupBoxの左上が基準のようです。  
実際、ラベルやテキストなどのSystem.Drawing.Point()をもっと小さくすると表示されました。


CC BY-SA 4.0
2022-11-21T08:49:54.050
92350
2022-11-21T08:49:54.050
48769
92340
answer


回答ではありません。が、コードを見て気になったので。

PowerShellでは[ハッシュ テーブルからオブジェクトを作成する](https://learn.microsoft.com/ja-
jp/powershell/module/microsoft.powershell.core/about/about_object_creation?view=powershell-7.3#create-
objects-from-hash-tables)ことができます。具体的にはこんな感じ。

[code]

    $optionform = [System.Windows.Forms.Form]@{
        StartPosition = "CenterScreen"
        Size = @{ Width = 500; Height = 500; }
        MaximizeBox = $False
        MinimizeBox = $false
        Text = "オプション"
        Owner = $form # $formはメインフォーム
    }
    
    $Group1 = [System.Windows.Forms.GroupBox]@{
        Location = @{ X = 10; Y = 10; }
        Size = @{ Width = 220; Height = 115; }
        Text = "グループ1"
    }
    $optionform.Controls.Add($Group1)
    
    $Group1.Controls.Add([System.Windows.Forms.Label]@{
        Location = @{ X = 15; Y = 20; }
        Size = @{ Width = 55; Height = 20; }
        Text = "ラベル1"
    })
    
[/code]

単一のオブジェクトを作成できるだけではなく、再帰的に表現できます。しかも`Location`プロパティや`Size`プロパティは`Point`／`Size`型であることがわかっているため、型名を省略可能です。


CC BY-SA 4.0
2022-11-21T12:13:36.470
92359
2022-11-21T12:13:36.470
4236
92340
answer