gpt4 book ai didi

c# - 为什么 DevExpress Treelist 会定期抛出 HideException?

转载 作者:太空狗 更新时间:2023-10-30 00:28:04 24 4
gpt4 key购买 nike

我一直在使用 DevExpress Filter TreeList代码并且很好奇为什么它会抛出 DevExpress.Utils.HideException

我的理解是异常是昂贵的,应该谨慎使用并且只在某些情况下使用,但下面的代码片段显示我们总是抛出 HideException 而没有任何特定事件或代码被触发。

来自FilterTreeList.cs

private void OnMouseDown(object sender, MouseEventArgs e)
{
if ( e.Button != MouseButtons.Left )
return;

TreeListHitInfo hitInfo = ((TreeList)sender).CalcHitInfo(e.Location);
if ( hitInfo.HitInfoType == HitInfoType.Column )
{
ColumnInfo colInfo = ((TreeList)sender).ViewInfo.ColumnsInfo[hitInfo.Column];
GridFilterButtonInfoArgs filterButtonInfo = GetFilterButtonInfoArgs(colInfo);

if ( filterButtonInfo != null && filterButtonInfo.Bounds.Contains(e.Location) )
{
filterButtonInfo.State = ObjectState.Pressed;
((TreeList)sender).InvalidateColumnHeader(hitInfo.Column);

throw new HideException();
}
}

他们为什么要在此处抛出 HideException,它有什么好处?

最佳答案

它是一种清理控件环境的程序流机制。尽管与普通代码相比异常确实是昂贵的(典型示例是在将字符串转换为整数的循环中使用 FormatExceptions —— 因此需要 TryParse 类型的方法),但与 UI 中的重大变化相比,从数据库等,它们非常便宜且易于维护。

您引用的演示代码正是这种情况:控件即将刷新其全部内容。最终用户点击了一个特定的图标来执行一个特定的操作——异常并不是“总是”被抛出的。我对这个示例代码(我强调它是示例代码)唯一不满的是,操作是在鼠标按下时完成的,而不是在鼠标松开时完成的。

我想争论的焦点是“异常可以用于这种宏程序流,还是我们应该制定一个硬性规定,它们只能用于错误报告?”但这是另一个问题。

更新

WinForms 团队告诉我:

HideException is our internal exception that is used to prevent default mouse events processing. We agree it's an old-fashioned way to stop code execution especially given that we already have the DXMouseEventArgs with an ability to set e.Handled = true. Unfortunately, the XtraTreeList doesn't currently fully support DXMouseEventArgs. We'll be adding this functionality in the next minor version and update the E2474 example accordingly.

所以它会在一个月左右的时间内引起考古兴趣。

关于c# - 为什么 DevExpress Treelist 会定期抛出 HideException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4125750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com