Как изменить размер элементов управления формы с помощью изменения размера формы - PullRequest
0 голосов
/ 20 мая 2019

в этом видео объясните, как изменить размер формы с помощью .net, я хотел бы знать, как это сделать в powershell, кто-то может добавить необходимый код в мой пример?

https://www.youtube.com/watch?v=QVi1ve5qHXA

Я пытаюсь использовать док или ахор, но не очень.

Результат, которого я хотел бы достичь, - это именно то, что вы видите на видео, видео было вставлено, чтобы уточнить, что я намерен делать. Размер каждого объекта в форме: кнопки, список, выходной ящик и т. Д. Должен быть изменен при перетаскивании правого угла формы или при использовании стандартной кнопки в окне «Развернуть».

CLS

$width = 1120
$Height = 560

$Form = New-Object System.Windows.Forms.Form    
$form.AutoSize = $true
$Form.MaximizeBox = $true
$form.ClientSize.Width = 2240
$form.ClientSize.Height = 1120
$Form.StartPosition = "CenterScreen"

$imagelistPC = New-Object 'System.Windows.Forms.ImageList'
$listviewPC = New-Object System.Windows.Forms.ListView
$listviewPC.Location = New-Object System.Drawing.Point(20,125) 
$listviewPC.Size = New-Object System.Drawing.Size(585,180) 
$form.Controls.Add($listviewPC) 

$button1user = New-Object System.Windows.Forms.Button 
$button1user.Location = New-Object System.Drawing.Size(625,30) 
$button1user.Size = New-Object System.Drawing.Size(110,40)
$button1user.Cursor = [System.Windows.Forms.Cursors]::Hand
$button1user.Font = New-Object System.Drawing.Font('Microsoft Sans Serif', 7, [System.Drawing.FontStyle]::Regular)
$button1user.Text = "test1" 
$button1user.BackColor = "Yellow"
$button1user.Add_Click({test1}) 
$button1user.AutoSize = $true
$Form.Controls.Add($button1user)  

$button2user = New-Object System.Windows.Forms.Button 
$button2user.Location = New-Object System.Drawing.Size(625,80)
$button2user.Size = New-Object System.Drawing.Size(110,40)
$button2user.Cursor = [System.Windows.Forms.Cursors]::Hand
$button2user.Font = New-Object System.Drawing.Font('Microsoft Sans Serif', 7, [System.Drawing.FontStyle]::Regular)
$button2user.Text = "test2" 
$button2user.BackColor = "Yellow"
$button2user.Add_Click({test2}) 
$Form.Controls.Add($button2user)  

$button3user = New-Object System.Windows.Forms.Button 
$button3user.Location = New-Object System.Drawing.Size(625,130) 
$button3user.Size = New-Object System.Drawing.Size(110,40)
$button3user.Cursor = [System.Windows.Forms.Cursors]::Hand
$button3user.Font = New-Object System.Drawing.Font('Microsoft Sans Serif', 7, [System.Drawing.FontStyle]::Regular)
$button3user.Text = "test3" 
$button3user.BackColor = "Yellow"
$button3user.Add_Click({test3})
$Form.Controls.Add($button3user) 

$button1pc = New-Object System.Windows.Forms.Button 
$button1pc.Location = New-Object System.Drawing.Size(745,30) 
$button1pc.Size = New-Object System.Drawing.Size(110,40)
$button1pc.Cursor = [System.Windows.Forms.Cursors]::Hand
$button1pc.Font = New-Object System.Drawing.Font('Microsoft Sans Serif', 7, [System.Drawing.FontStyle]::Regular)
$button1pc.Text = "test A" 
$button1pc.BackColor = "Yellow"
$button1pc.Add_Click({COMPUTERCHANGEOU}) 
$Form.Controls.Add($button1pc)  

$button2pc = New-Object System.Windows.Forms.Button 
$button2pc.Location = New-Object System.Drawing.Size(745,80) 
$button2pc.Size = New-Object System.Drawing.Size(110,40)
$button2pc.Cursor = [System.Windows.Forms.Cursors]::Hand
$button2pc.Font = New-Object System.Drawing.Font('Microsoft Sans Serif', 7, [System.Drawing.FontStyle]::Regular)
$button2pc.Text = "test B" 
$button2pc.BackColor = "Yellow"
$button2pc.Add_Click({b}) 
$Form.Controls.Add($button2pc) 

$button3pc = New-Object System.Windows.Forms.Button 
$button3pc.Location = New-Object System.Drawing.Size(745,130) 
$button3pc.Size = New-Object System.Drawing.Size(110,40)
$button3pc.Cursor = [System.Windows.Forms.Cursors]::Hand
$button3pc.Font = New-Object System.Drawing.Font('Microsoft Sans Serif', 7, [System.Drawing.FontStyle]::Regular)
$button3pc.Text = "test C" 
$button3pc.BackColor = "Yellow"
$button3pc.Add_Click({c}) 
$Form.Controls.Add($button3pc) 

$outputBox = New-Object System.Windows.Forms.TextBox 
$outputBox.Location = New-Object System.Drawing.Size(20,320) 
$outputBox.Size = New-Object System.Drawing.Size(585,180) 
$outputBox.MultiLine = $True 
$outputBox.ReadOnly = $True
$outputBox.Font = New-Object System.Drawing.Font("Calibri",11,[System.drawing.FontStyle]::Bold)
$outputBox.ForeColor = [Drawing.Color]::Green
$outputBox.ScrollBars = "Vertical" 
$Form.Controls.Add($outputBox) 

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

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Согласно вашему видео. Вы изменяете размер отдельного встроенного элемента формы на панели форм в режиме конструктора, а не в запущенном приложении.

Это то, что позволяет дизайнер перетаскивания. В PowerShell нет встроенного конструктора капель. Существует расширение для VSCode, которое можно купить в VSCode MarketPlace, PowerShell Pro Tools , или использовать PoshGui , а также сохранить и использовать / переоборудовать код оттуда.

Похоже, вы говорите, что хотите, чтобы пользователь мог изменять размеры этих кнопок или других объектов в запущенном приложении. Поправьте меня, если я здесь не прав, но если это так, то это не совсем то, что я когда-либо видел в любом приложении, используя любой язык. Кроме того, я не уверен, какой вариант использования (изменение размера элементов во время выполнения) может решить эту проблему.

Изменение размера формы и автоматическое изменение размеров элементов в зависимости от размера формы, конечно, именно это показывает nemze.

0 голосов
/ 20 мая 2019

Я не буду писать код для вас, потому что это займет много времени и усилий, но я могу привести вам пример.

Сначала давайте создадим некоторые элементы формы и закрепим их:

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
[System.Windows.Forms.Application]::EnableVisualStyles()

$Form = New-Object system.Windows.Forms.Form
$Form.ClientSize = '500,230'
$Form.text = "Some title"
$Form.StartPosition = 'CenterScreen'

$Button1 = New-Object System.Windows.Forms.Button
$Button1.Location = New-Object System.Drawing.Point(200,150)
$Button1.Size = New-Object System.Drawing.Size(100,50)
$Button1.Text = "START"
$Button1.Anchor = [System.Windows.Forms.AnchorStyles]::Top `
-bor [System.Windows.Forms.AnchorStyles]::Bottom `
-bor [System.Windows.Forms.AnchorStyles]::Left `
-bor [System.Windows.Forms.AnchorStyles]::Right

$ListBox1 = New-Object system.Windows.Forms.ListBox
$ListBox1.text = "listBox"
$ListBox1.location = New-Object System.Drawing.Point(50,50)
$ListBox1.size = New-Object System.Drawing.Size(50,50)
$ListBox1.Anchor = [System.Windows.Forms.AnchorStyles]::Top `
-bor [System.Windows.Forms.AnchorStyles]::Bottom `
-bor [System.Windows.Forms.AnchorStyles]::Left `
-bor [System.Windows.Forms.AnchorStyles]::Right

$form.Controls.AddRange(@($Button1, $ListBox1))
$Form.ShowDialog()

Как вы можете видеть прямо сейчас, размеры элементов изменяются. Попробуйте закомментировать верхний и нижний якорь и посмотреть, что произойдет.

Однако в этом решении есть большая ошибка. Если вы собираетесь изменить их размер слишком сильно, элементы начнут перекрываться. Вы можете решить эту проблему, используя (например) Panel Class , чтобы мы могли создавать различные типы макетов. Я покажу вам пример кода с TableLayoutPanel :

$tableLayoutPanel1 = New-Object System.Windows.Forms.TableLayoutPanel
$tableLayoutPanel1.RowCount = 2 #how many rows
$tableLayoutPanel1.ColumnCount = 2 #how many columns
$tableLayoutPanel1.Controls.Add($Button1, 0, 0) #choose where to place button
$tableLayoutPanel1.Controls.Add($ListBox1, 1, 1) #choose where to place listbox
$tableLayoutPanel1.Dock = [System.Windows.Forms.DockStyle]::Fill #choose style

#make rows the same size
$tableLayoutPanel1.RowStyles.Add((new-object System.Windows.Forms.RowStyle([System.Windows.Forms.SizeType]::Percent, 50)))
$tableLayoutPanel1.RowStyles.Add((new-object System.Windows.Forms.RowStyle([System.Windows.Forms.SizeType]::Percent, 50)))
#make columns the same size
$tableLayoutPanel1.ColumnStyles.Add((new-object System.Windows.Forms.ColumnStyle([System.Windows.Forms.SizeType]::Percent,50)))
$tableLayoutPanel1.ColumnStyles.Add((new-object System.Windows.Forms.ColumnStyle([System.Windows.Forms.SizeType]::Percent,50)))

$Form.controls.AddRange(@($tableLayoutPanel1)) #don't add button and listbox here because they're already added by tablelayoutpanel
$Form.ShowDialog()

Если вы хотите объединить столбцы или строки, вы можете попробовать:

$tableLayoutPanel1.SetColumnSpan($Button1,2)

или

$tableLayoutPanel1.SetRowSpan($Button1,2)

Дополнительное примечание: вы можете удалять строки с размером элементов формы и значением местоположения, потому что они не будут иметь значения, если вы используете TableLayoutPanel. Вы можете найти рабочий код моего примера здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...