右键单击select powershell中datagridview控件中的一行

Right Click to select a row in datagridview control in powershell

我正在使用 WPF 控件的 Powershell 开发一个项目。

我有一个数据网格视图,其中只能 select 编辑一整行。还有一个上下文菜单条在数据网格视图中也能正常工作。

我的问题是我想要一个右键单击鼠标事件到 select 它被单击的行并显示上下文菜单条。所以用户毫无疑问点击了什么。目前,selected 行不会因右键单击而改变。

我找到了很多示例,但可以使用一些指导来转换它们以便在 powershell 中使用。

一旦我记下了这个,我想为每个上下文菜单分配操作 selections 谢谢!

linked answer 中的代码可以转换为 PowerShell,如下所示。

事件处理程序注册

this.MyDataGridView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.MyDataGridView_MouseDown);
this.DeleteRow.Click += new System.EventHandler(this.DeleteRow_Click);

PowerShell 不支持 += 注册事件处理程序,但您还有两个其他选择。要么调用 C# 最终将 += 转换为的特别命名的方法——它们都将具有 add_<EventName>:

的形式
$dataGridView = [System.Windows.Forms.DataGridView]::new()
# ...
$dataGridView.add_MouseDown($dgvMouseHandler)

或者,使用 Register-ObjectEvent cmdlet 让 PowerShell 为您处理注册:

Register-ObjectEvent $dataGridView -EventName MouseDown -Action $dgvMouseHandler

事件参数

private void MyDataGridView_MouseDown(object sender, MouseEventArgs e) {
    if(e.Button == MouseButtons.Right)
    {
        var hti = MyDataGridView.HitTest(e.X, e.Y);
        // ... 

为了使用事件处理程序参数,您可以在脚本块中声明由 handler delegate 定义的参数:

$dgvMouseHandler = {
  param($sender,[System.Windows.Forms.MouseEventArgs]$e)

  # now you can dereference `$e.X` like in the C# example
}

或利用 $EventArgs automatic variable:

$dgvMouseHandler = {
  # `$EventArgs.X` will also do
}