VisualStudioのようにフォームデザイナがあるわけではないのでコントロール配置がちょっと面倒。
というわけで汎用のコントロール配置関数を作ってみる。
# #control[0..2]がコントロール配列、control[3]がボタン配列############### # Function MSet-Control($control,$form){ $CWidth,$CHeight = 100,30 #コントロールのサイズ $BWidth,$BHeight = 50,30 #ボタンのサイズ $XMargin,$YMargin = 10,10 #コントロールマージン $ButtonMaxCount = 6 #ボタンの最大数 #Formサイズの設定 $maxControlCount = [Math]::Max([Math]::Max($control[0].Count,$control[1].Count),$control[2].Count) $formHeight = $maxControlCount * ($CHeight + $XMargin) + ($BHeight + $XMargin) $formWidth = ($BWidth + $XMargin) * $ButtonMaxCount $size = New-Object System.Drawing.Size $formWidth,$formHeight $form.ClientSize = $size #Formへコントロールの配置 0..2 | %{$XPos = $XMargin}{ $YPos = $XMargin foreach($cl in $control[$_]){ [System.Windows.Forms.Control]$ctrl = $cl $ctrl.Left = $XPos $ctrl.Top = $YPos ; $YPos += ($CHeight + $XMargin) $ctrl.Width = $CWidth $ctrl.Height = $CHeight $form.Controls.Add($ctrl) } $XPos += ($CWidth + $XMargin) } #Formへボタンの配置 $buttonCount = 1 foreach($button in $control[3]){ $button.Top = $size.Height - $BHeight - $YMargin $button.Left = $size.Width - ($buttonCount * ($BWidth + $XMargin)) $button.Width = $BWidth $form.Controls.Add($button) $buttonCount++ } } $arr = New-Object System.Collections.ArrayList[] 4 0..3 | %{$arr[$_] = New-Object System.Collections.ArrayList} $test1 = New-Object System.Windows.Forms.Label $test1.text = "テスト" [void]$arr[0].Add($test1) $test2 = New-Object System.Windows.Forms.TextBox [void]$arr[0].Add($test2) $test3 = New-Object System.Windows.Forms.TextBox [void]$arr[0].Add($test3) $test4 = New-Object System.Windows.Forms.TextBox [void]$arr[1].Add($test4) $test5 = New-Object System.Windows.Forms.ComboBox $test5.Items.AddRange(@("test1","test2","test3")) [void]$arr[2].Add($test5) $button1 = New-Object System.Windows.Forms.Button $button1.Text = "閉じる" $button1.Add_Click({[void] [System.Windows.Forms.MessageBox]::show("フォームを閉じます");$form.Close()}) [void]$arr[3].Add($button1) $form = New-Object System.Windows.Forms.Form MSet-Control $arr $form #M00Func.ps1の関数(汎用的にフォームにコントロールを配置する) [void]$form.ShowDialog() |
とりあえずは使い物になりそう・・・・。
微調整が必要な場合は、フォームをShowする前に以下のような感じで。
$test1.Top += 10 |
0 件のコメント:
コメントを投稿