c# - 如何将 DataGridViewCellEventArgs 设置为已处理?
问题描述
我想将 a 标记DataGridViewCellEventArgs
为已处理,以便它的下游不会干扰它的处理方式。
该类DataGridViewCellEventArgs
没有处理的属性,它的基类也没有。
我正在处理的事件是CellMouseEnter
这是DataGridView
我从中实例化的基本控件:
public class DataGridViewWithFormatting : System.Windows.Forms.DataGridView
{
protected override void OnCellMouseEnter(DataGridViewCellEventArgs e)
{
base.OnCellMouseEnter(e);
this.Cursor = Cursors.Default;
}
}
这是DataGridView
我在表单中使用的控件:
private CustomControls.DataGridViewWithFormatting dgvItems;
和...
dgvItems.CellMouseEnter += new EventHandler(dgvItems_CellMouseEnter);
然后...
private void dgvItems_CellMouseEnter()
{
this.Cursor = Cursors.Hand;
}
解决方案
您可以根据自己的要求使用以下任一解决方案。
1 - 使用 BeginInvoke
要将光标设置在 中CellMouseEnter
,您可以使用BeginInvoke
:
private void Dgv_CellMouseEnter(object sender, DataGridViewCellEventArgs e)
{
BeginInvoke(new Action(() => dgv.Cursor = Cursors.Hand));
}
2 - 创建一个新的可取消(可处理)DataGridViewCellEventArgs
创建一个MyDataGridViewCellEventArgs
源自DataGridViewCellEventArgs
拥有Handled
属性的新事件参数。然后在您的派生DataGridView
中,调用时base.OnCellMouseEnter
,传递新的可取消(可处理)事件参数的实例。在事件处理程序中,仍然保留DataGridViewCellEventArgs
在签名中。要取消,请将其转换为MyDataGridViewCellEventArgs
并通过设置取消它Handled = true;
:
public class DataGridViewWithFormatting : System.Windows.Forms.DataGridView
{
protected override void OnCellMouseEnter(DataGridViewCellEventArgs e)
{
var myE = new MyDataGridViewCellEventArgs(e);
base.OnCellMouseEnter(myE);
if (!myE.Handled)
this.Cursor = Cursors.Default;
}
}
public class MyDataGridViewCellEventArgs : DataGridViewCellEventArgs
{
public bool Handled { get; set; } = false;
public MyDataGridViewCellEventArgs(DataGridViewCellEventArgs e)
: base(e.ColumnIndex, e.RowIndex) { }
}
和事件处理程序:
private void Dgv_CellMouseEnter(object sender, DataGridViewCellEventArgs e)
{
dgv.Cursor = Cursors.Hand;
var myE = e as MyDataGridViewCellEventArgs;
if (myE != null)
myE.Handled = true;
}
推荐阅读
- javascript - 这种指令的解释是什么 let {max}=Math;
- amazon-web-services - 使用过滤器订阅主题的 aws cli 命令
- typescript - 从函数返回 Observable 或数字以及如何测试它
- c# - 用于 Triple DES HMAC 的 Openssl 命令行,例如 C# MACTripleDES
- r - 如何制作具有平均密度和 SE 条形的条形图
- sql - Labview 和 SQL 存储过程 - 过程或函数 StoreTemp 指定了太多参数
- javascript - 如何在Javascript中为以下场景编写选择名称类的xpath?
- visual-studio-code - webview 背景颜色似乎没有扩展到覆盖整个视图
- javascript - prod 环境中的 .env 变量(dotenv-webpack)
- pandas - 熊猫:时间间隔的滚动平均值加上索引分组