PowerShell-DataGridView Windows窗体拖放问题

1970年

您好StackOverflow成员,

希望获得有关Windows Form DataGridView Control问题的指导。我偶然发现了一个简单的基于Windows窗体的PowerShell脚本,该脚本应使用拖放事件。我面临的问题是,当我在PowerShell ISE界面中加载/运行PowerShell脚本时,拖动事件似乎不起作用。但是,如果我再次运行它(不执行任何其他操作),则拖动事件似乎起作用(我只是将几个文件从File Explorer拖到DataGridView Form Control上)。

这是我的代码:

<#==============================================+
 |  BEGIN SECTION:  Form Control Declarations.  |
 +==============================================#>

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

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

[System.Windows.Forms.Application]::EnableVisualStyles()

# Create the "ProjectWise File Replacer" Form Control.
$ProjectWiseFileReplacer = New-Object System.Windows.Forms.Form
$ProjectWiseFileReplacer.ClientSize = New-Object System.Drawing.Point(604,460)
$ProjectWiseFileReplacer.Text = "ProjectWise File Replacer (Version 1.0.0) - By Patel, Greene & Associates, LLC"
$ProjectWiseFileReplacer.TopMost = $True
$ProjectWiseFileReplacer.MinimumSize = $ProjectWiseFileReplacer.ClientSize
$ProjectWiseFileReplacer.FormBorderStyle = 'FixedDialog'
$ProjectWiseFileReplacer.Icon = "C:\PGA\Information Technology\ProjectWise\Administration\PowerShell\Scripts\ProjectWise_Icon.ico"
$ProjectWiseFileReplacer.StartPosition = "CenterScreen"

# Create "Files" Data Grid View Form Control.
$DataGridView_Files = New-Object System.Windows.Forms.DataGridView
$DataGridView_Files.Width = 572
$DataGridView_Files.Height = 213
$DataGridView_Files.ColumnCount = 2
$DataGridView_Files.ColumnHeadersVisible = $True
$DataGridView_Files.Columns[0].Name = "Path and File Name"
$DataGridView_Files.Columns[1].Name = "Status"
$DataGridView_Files.Location = New-Object System.Drawing.Point(16,107)
$DataGridView_Files.SelectionMode = 'FullRowSelect'
$DataGridView_Files.MultiSelect = $False
$DataGridView_Files.TabIndex = 0
$DataGridView_Files.RowHeadersVisible = $False
$DataGridView_Files.AutoSizeColumnsMode = 'Fill'
$DataGridView_Files.AllowUserToAddRows = $False
$DataGridView_Files.AllowUserToDeleteRows = $True
$DataGridView_Files.AllowUserToResizeRows = $False
$DataGridView_Files.ReadOnly = $True
$DataGridView_Files.AllowDrop = $True
$DataGridView_Files.RowTemplate.Height = 17
$DataGridView_Files.ColumnHeadersHeight = 22
$DataGridView_Files.Enabled = $True
$DataGridView_Files.Add_DragDrop($DataGridView_Files_DragDrop)
$DataGridView_Files.Add_DragOver($DataGridView_Files_DragOver)

# Add Form Controls to the "ProjectWise File Replacer" Form.
$ProjectWiseFileReplacer.Controls.AddRange(@($DataGridView_Files))

<#================================================+
 |  BEGIN SECTION:  Declare Form Control Events.  |
 +================================================#>

# "Files" Data Grid View Form Control (Drag Over Event).
$DataGridView_Files_DragOver=[System.Windows.Forms.DragEventHandler]{
    # Files have been selected to drag over the "Files" Data Grid View Form Control.
    If ($_.Data.GetDataPresent([Windows.Forms.DataFormats]::FileDrop))
        {
            # Set Drag Over Event Handler Effect.
            $_.Effect = 'Copy'
        }
    # Files have not been selected to drap over the "Files" Data Grid View Form Control.
    Else
        {
            # Set Drag Over Event Handler Effect.
            $_.Effect = 'None'
        }
}

# "Files" Data Grid View Form Control (Drag Drop Event).
$DataGridView_Files_DragDrop=[System.Windows.Forms.DragEventHandler]{
    # Create a String Array for File Collection.
    $Files = $_.Data.GetData([Windows.Forms.DataFormats]::FileDrop)
    
    # Files have been selected, dragged and dropped.
    If ($Files)
        {
            # Loop through each File within the File Collection.
            ForEach ($File in $Files)
          {
                    # Add File to "Files" Data Grid View Control.
                    [void]$DataGridView_Files.Rows.Add($File,"")
                }
        }
}

<#========================================+
 |  BEGIN SECTION:  Main Body of Script.  |
 +========================================#>

# Display (Show) the "ProjectWise File Replacer" Form Window.
[void]$ProjectWiseFileReplacer.ShowDialog()

关于为什么我第一次运行它不起作用的任何想法?

PS ..从PowerShell ISE程序外部运行脚本时,得到相同的结果(无法正常工作)。

笔记:

  • Windows 10专业版(64位)
  • 在64位模式下运行脚本。
根据

移动定义为$DataGridView_Files_DragOver$DataGridView_Files_DragDrop 上面,你对他们所说的地方。现在,您可以在尚未定义它们时使用它们。

第二次运行该代码,它们就已知并且功能正常。

$DataGridView_Files.Enabled = $True

**Here would be a good spot**

$DataGridView_Files.Add_DragDrop($DataGridView_Files_DragDrop)
$DataGridView_Files.Add_DragOver($DataGridView_Files_DragOver)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

验证DataGridView Windows窗体

来自分类Dev

Windows窗体刷新datagridview

来自分类Dev

Windows窗体DataGridView中的图像

来自分类Dev

Windows 窗体 DataGridView 快速加载

来自分类Dev

datagridview问题

来自分类Dev

datagridview在Windows窗体中显示空行

来自分类Dev

Windows窗体-在我的DataGridView中强制“刷新”

来自分类Dev

Windows窗体中使用C#的DataGridView

来自分类Dev

创建Telerik层次结构DataGridView Windows窗体

来自分类Dev

datagridview在Windows窗体中显示空行

来自分类Dev

在DataGridView中拖放行

来自分类Dev

使用C#Windows Form应用程序拖放Datagridview

来自分类Dev

在DataGridView中拖放多个列

来自分类Dev

Datagridview取消对填充列的拖放

来自分类Dev

c#DataGridView离开事件使Windows窗体无响应

来自分类Dev

Windows窗体DataGridView中的手风琴

来自分类Dev

c#DataGridView离开事件使Windows窗体无响应

来自分类Dev

Windows窗体DataGridView中的手风琴

来自分类Dev

将Windows窗体中的DataGridView绑定到列表<List <T >>

来自分类Dev

如何清除C#Windows窗体中的DataGridView?

来自分类Dev

如何使用windows窗体在datagridview中显示计数

来自分类Dev

Datagridview格式列问题

来自分类Dev

DataGridView CellFormatting性能问题

来自分类Dev

DataGridView列问题

来自分类Dev

奇怪的DataGridView问题

来自分类Dev

Datagridview日期格式问题

来自分类Dev

从DataSet问题填充DataGridView

来自分类Dev

datagridview winforms 的打印问题

来自分类Dev

使用Windows API拖放鼠标的Powershell