我正在 Powershell 中开发一个使用 WPF 控件的项目。
我有一个数据网格视图,其中只能选择一整行。还有一个上下文菜单条在数据网格视图中也运行良好。
我的问题是我想要一个右键单击鼠标事件来选择单击它的行并显示上下文菜单条。因此用户对于他们点击的内容毫无疑问。目前,右键单击所选行不会改变。
我找到了很多示例,但可以使用一些指导来将它们转换为在 powershell 中使用。
一旦我把它记下来,我想为每个上下文菜单条选择分配操作 谢谢!
链接答案中的代码可以翻译为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
自动变量:
$dgvMouseHandler = {
# `$EventArgs.X` will also do
}
这篇文章有很好的信息,但我对 PS 还很陌生,所以仍然需要大约一天的时间才能让它工作,试图将所有部分组合在一起。以防万一其他人试图让它工作,这就是对我有用的代码。
$dataGridView.add_MouseDown( {param($sender, [System.Windows.Forms.MouseEventArgs]$e)
If ($e.Button -eq [System.Windows.Forms.MouseButtons]::Right){
$HTI = $dataGridView.HitTest($e.x,$e.y)
$dataGridView.ClearSelection()
$dataGridView.Rows[$HTI.RowIndex].Selected = $true } })