Эффект перетаскивания Powershell, для изображения установлено нулевое значение, не работает - PullRequest
0 голосов
/ 03 февраля 2020

Итак, я пытался получить скрипт, позволяющий пользователю переключать изображение между двумя объектами 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

введите описание изображения здесь

...