具有两列的表单 - 文本框在中间被切掉

form with two columns- text box get cut in the middle

我正在为用户创建一个 gui 脚本来获取某些文件,它还没有完成,但我有一个我无法解决的问题。 我想选择他们想要的文件+一个选项,让他们为他们选择的文件插入他们想要的名称。 问题是文本框在中间被切掉了,只有当你写了很多你才会看到文本的结尾。 请帮忙!非常感谢!

这是完整的脚本:*再一次-不完整

 [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
  [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 

 #This creates the path for the Json and also check if it is already there.
  If(!(Test-Path -Path C:\Users$env:USERNAME\documents\Json))
  {
  New-Item c:\users$env:USERNAME\documents -ItemType directory -Name Json

  $path = "c:\users$env:USERNAME\documents\Json"

  }
  #creating the form
  $objForm = New-Object System.Windows.Forms.Form 
  $objForm.Text = "Ofir`s script"
  $objForm.Size = New-Object System.Drawing.Size(480,200) 
  $objForm.StartPosition = "CenterScreen"

  #creating the label
  $objLabel = New-Object System.Windows.Forms.Label
  $objLabel.Location = New-Object System.Drawing.Size(20,20) 
  $objLabel.Size = New-Object System.Drawing.Size(280,20) 
  $objLabel.Text = "Please check the relevant boxes:"
  $objForm.Controls.Add($objLabel)

  #This creates a checkbox called dsp.z
  $objDspCheckbox = New-Object System.Windows.Forms.Checkbox 
  $objDspCheckbox.Location = New-Object System.Drawing.Size(20,40) 
  $objDspCheckbox.Size = New-Object System.Drawing.Size(280,20)
  $objDspCheckbox.Text = "dsp.z"
  $objDspCheckbox.TabIndex = 0
  $objForm.Controls.Add($objDspCheckbox)

  #This creates a checkbox called fpga.bin
  $objFpgaCheckbox = New-Object System.Windows.Forms.Checkbox 
  $objFpgaCheckbox.Location = New-Object System.Drawing.Size(20,60) 
  $objFpgaCheckbox.Size = New-Object System.Drawing.Size(280,20)
  $objFpgaCheckbox.Text = "fpga.bin"
  $objFpgaCheckbox.TabIndex = 1
  $objForm.Controls.Add($objFpgaCheckbox)

  #This creates a checkbox called bootrom_uncmp.bin
  $objBootCheckbox = New-Object System.Windows.Forms.Checkbox 
  $objBootCheckbox.Location = New-Object System.Drawing.Size(20,80) 
  $objBootCheckbox.Size = New-Object System.Drawing.Size(280,20)
  $objBootCheckbox.Text = "bootrom_uncmp.bin"
  $objBootCheckbox.TabIndex = 2
  $objForm.Controls.Add($objBootCheckbox)

  #This creates a label for the TextBox1
  $objLabel1 = New-Object System.Windows.Forms.Label
  $objLabel1.Location = New-Object System.Drawing.Size(300,20) 
  $objLabel1.Size = New-Object System.Drawing.Size(280,20) 
  $objLabel1.Text = "Change the name?:"
  $objForm.Controls.Add($objLabel1)

  #This creates the TextBox1
  $objTextBox1 = New-Object System.Windows.Forms.TextBox 
  $objTextBox1.Location = New-Object System.Drawing.Size(200,40) 
  $objTextBox1.Size = New-Object System.Drawing.Size(200,20)
  $objTextBox1.TabIndex = 3 
  $objForm.Controls.Add($objTextBox1)

  #ok Button 
  $OKButton = New-Object System.Windows.Forms.Button
  $OKButton.Location = New-Object System.Drawing.Size(40,120)
  $OKButton.Size = New-Object System.Drawing.Size(75,23)
  $OKButton.Text = "OK"
  $OKButton.Add_Click(
  {
 if ($objDspCheckbox.Checked -eq $true)
 {
    New-Item $path -itemtype file -name Dsp.json -value @"
 "{"sys_ver":"01.01.01.02","RED":[],"RED_VA":[],"BLACK":               [{"type":"6","type_descr":"DSP file","tar_name":"dsp.tar.gz","image_name":"dsp.z","CRC":"1234567","version":"01.01.01.02","metadata":"62056"}
 ],"BLACK_VA":[]
 }"
"@ ;$objForm.close()
 }

 elseif ($objFpgaCheckbox.Checked -eq $true)
 {
    New-Item $path -itemtype file -name Fpga.json -value @"
 "
 {"type":"4","type_descr":"FPGA file","tar_name":"FPGA.tar.gz","image_name":"fpga.z","CRC":"1234567","version":"01.01.01.02","metadata":"9730652"},
 "
 "@

  ;$objForm.close()
 }

 elseif ($objBootCheckbox.Checked -eq $true)
 {
    New-Item $path -itemtype file -name Boot.json -value "Hello3" ;$objForm.close()
 }
  })

  $objForm.Controls.Add($OKButton)

  #cancle Button
  $CancelButton = New-Object System.Windows.Forms.Button
  $CancelButton.Location = New-Object System.Drawing.Size(140,120)
  $CancelButton.Size = New-Object System.Drawing.Size(75,23)
  $CancelButton.Text = "Cancel"
  $CancelButton.Add_Click({$objForm.Close()})
  $objForm.Controls.Add($CancelButton)

  #Parameters (Need to add)
  $dspname = $objTextBox1

  #makes the form appear on top of the screen
  $objForm.Topmost = $True

  $objForm.Add_Shown({$objForm.Activate()})
  [void] $objForm.ShowDialog()

the problem is the text box is cut in the middle and only if you write a lot you will see the end of your text. please help! thanks a lot!

问题是 TextBox 控件隐藏在您的 CheckBox 控件下面,因为您将它们配置得离谱。

变化:

$objDspCheckbox.Size = New-Object System.Drawing.Size(280,20)

更合理的设置,例如 150 像素而不是 280 像素:

$objDspCheckbox.Size = New-Object System.Drawing.Size(150,20)

对所有复选框执行此操作,您会发现问题消失了。


或者,通过在其父级(Form 对象本身)上设置 0 的 ChildIndex,将 $objTextBox1 控件置于最前面:

$objForm.Controls.SetChildIndex($objTextBox1,0)

在添加所有子控件之后(但在调用 $objForm.ShowDialog() 之前)