Итак, я пытался получить скрипт, позволяющий пользователю переключать изображение между двумя объектами Pictureboxes, я использую форму Windows в powershell. Все работает нормально, но эффект для повторной инициализации изображения при щелчке по $ null, как только изображение будет сброшено во второй блок. По какой-то причине, если я распечатаю значение индекса, по которому щелкают запросы MD (Mouse Down), значение является точным, но поскольку изображение, которое должно быть пустым, принадлежит запросу DD (Drag Drop), так как я хочу для изображение, по которому щелкают, чтобы исчезнуть после его перетаскивания во второе поле, когда я печатаю значение индекса, оно неверно.
Цель: если изображение только щелкнуто, то ничего не происходит, но если изображение щелкнуто и перетащить на второй блок, затем изображение на блоке один должен исчезнуть.
Строка 37. Заменить на полный путь к изображению Строка 94. Попытка напечатать изображение, на которое нажали, MD.
Код:
$global:getValue2=$null
$global:ans=""
function global:generate($param){
$global:ans=$param
return $param
}
function blockLocation($param){
switch ($param) {
"1" {return "15,15"; break}
"2" {return "15,120"; break}
default {return "15,0"; break}
}
}
function Desktop1(){
Add-Type -AssemblyName System.Windows.Forms
$Form = New-Object system.Windows.Forms.Form
$Form.Text = "Home"
$Form.BackgroundImage = $Image
$Form.Width = 80
$Form.Height = 260
$Font = New-Object System.Drawing.Font("Times New Roman",24,[System.Drawing.FontStyle]::Italic)
$Form.Font = $Font
for($i=1;$i -lt 3;$i++){
$name = '$picturebox' + $i
New-Variable -Name "$name"
}
$Form_Load = {
#TODO: Initialize Form Controls here
$picturebox1.AllowDrop = $true
$picturebox2.AllowDrop = $true
$picturebox1.Image =
[System.Drawing.Image]::FromFile('.\skel.png')
}
for($i=1;$i -lt 3;$i++){
$anchor = '$_'
$nuller = "$"+"null"
$imgX = '$img' + $i
New-Variable -Name "$imgX"
$bmpX = '$bmp' + $i
New-Variable -Name "$bmpX"
$name = '$picturebox' + $i
$nameTag = '$picturebox' + $i
$name = "$name = New-Object 'System.Windows.Forms.PictureBox'"
Invoke-Expression $name
$MD = '$pictureboxMD' + $i
$MDTag = '$picturebox' + $i
$MDTag2 = '$pictureboxMD' + $i
$global:ans = '$global:ans'
New-Variable -Name "$MD"
$MD = "$MD = [System.Windows.Forms.MouseEventHandler]{
#Event Argument: $anchor = [System.Windows.Forms.MouseEventArgs]
$imgX = $MDTag.Image
$MDTag.DoDragDrop($imgX, [System.Windows.Forms.DragDropEffects]::Copy)
generate $i
#Code to set image to null
#$MDTag.Image = $nuller
#[System.Windows.MessageBox]::Show($ans)
}"
$DE = '$pictureboxDE' + $i
$DETag = '$picturebox' + $i
$DETag2 = '$pictureboxDE' + $i
New-Variable -Name "$DE"
$DE = "$DE = [System.Windows.Forms.DragEventHandler]{
#Event Argument: $anchor = [System.Windows.Forms.DragEventArgs]
if ($anchor.Data.GetDataPresent('Bitmap')) {
$anchor.Effect = [System.Windows.Forms.DragDropEffects]::Copy
}
}"
$DD = '$pictureboxDD' + $i
$DDTag = '$picturebox' + $i
$DDTag2 = '$pictureboxDD' + $i
$DDTag3 = '$DDTag3'
New-Variable -Name "$DD"
$DD = "$DD = [System.Windows.Forms.DragEventHandler]{
$bmpX = $anchor.Data.GetData('Bitmap')
$DDTag.Image = $bmpX
#Index Value I am trying to collect to be null'd
$DDTag3 = $global:ans
#[System.Windows.MessageBox]::Show($DDTag3)
}"
Invoke-Expression $MD
Invoke-Expression $DE
Invoke-Expression $DD
}
# picturebox1
$picturebox1.BackColor = 'ActiveCaption'
$picturebox1.Location = blockLocation(1)
$picturebox1.Margin = '4, 4, 4, 4'
$picturebox1.Name = 'picturebox1'
$picturebox1.Size = '100, 100'
$picturebox1.TabIndex = 1
$picturebox1.TabStop = $False
$picturebox1.SizeMode = 'Zoom'
$picturebox1.add_MouseDown($pictureboxMD1)
$picturebox1.add_DragEnter($pictureboxDE1)
$picturebox1.add_DragDrop($pictureboxDD1)
$Form.Controls.Add($picturebox1)
# picturebox2
$picturebox2.BackColor = 'ActiveCaption'
$picturebox2.Location = blockLocation(2)
$picturebox2.Margin = '4, 4, 4, 4'
$picturebox2.Name = 'picturebox2'
$picturebox2.Size = '100, 100'
$picturebox2.TabIndex = 2
$picturebox2.TabStop = $False
$picturebox2.SizeMode = 'Zoom'
$picturebox2.add_DragDrop($pictureboxDD2)
$picturebox2.add_DragEnter($pictureboxDE2)
$picturebox2.add_MouseDown($pictureboxMD2)
$Form.Controls.Add($picturebox2)
$Form.AutoScaleMode = 'Font'
$Form.FormBorderStyle = 'FixedDialog'
$Form.Margin = '5, 5, 5, 5'
$Form.MaximizeBox = $False
$Form.MinimizeBox = $False
$Form.Name = 'form1'
$Form.StartPosition = 'CenterScreen'
$Form.Text = 'Form'
$Form.add_Load($Form_Load)
$Form.ShowDialog()
}
Desktop1
введите описание изображения здесь