我有一个ListView在平铺模式。我创建了一个自定义方法来触发SizeChanged事件时触发。有没有办法覆盖这个,所以方法在SizeChanged事件被触发之前触发?C#列表视图钩预先SizeChanged事件
我试图寻找一个SizeChanging事件,但没有一个。我怎样才能做到这一点?
我有一个ListView在平铺模式。我创建了一个自定义方法来触发SizeChanged事件时触发。有没有办法覆盖这个,所以方法在SizeChanged事件被触发之前触发?C#列表视图钩预先SizeChanged事件
我试图寻找一个SizeChanging事件,但没有一个。我怎样才能做到这一点?
为了在触发SizeChanged
事件之前添加一些逻辑,您需要继承现有的ListView
控件。在项目中创建一个新的类,并将此代码粘贴到它:
public class CustomListView : ListView
{
protected override void OnSizeChanged(System.EventArgs e)
{
//Fire my custom method before the ListView's size is changed
MyCustomMethod();
base.OnSizeChanged(e);
}
private void MyCustomMethod()
{
//Insert your custom logic here
//...
}
}
然后建立您的项目,并使用此CustomListView
控制(或任何你决定将它命名),而不是标准ListView
。
另外,如果你想从控制本身分离自定义逻辑,你可以让你的自定义列表视图引发一个事件。然后,您可以处理这个新事件(为了保持一致性,我们将其称为SizeChanging
),无论您在代码中需要什么地方。例如,修改上面的示例:
public class CustomListView : ListView
{
public event EventHandler SizeChanging;
protected override void OnSizeChanged(System.EventArgs e)
{
//Raise the SizeChanging event before the ListView's size is changed
if (SizeChanging != null) {
SizeChanging(this, e);
}
base.OnSizeChanged(e);
}
}
nitpicky:'Control'派生自'System.ComponentModel.Component',所有控件(和Form)事件都由'Component.Events'('System.ComponentModel.EventHandlerList')管理。建议使用这种机制,而不是将事件指针添加到Control实例。 http://msdn.microsoft.com/en-us/library/system.componentmodel.eventhandlerlist.aspx – Tergiver 2010-12-16 19:00:12
@Tergiver:有趣的是,我认为我从未见过这种地方。出于好奇,因为你链接到的文档没有这样说,有没有特别推荐的地方,或许有一个例子? – 2010-12-16 19:06:40
如果您要求比Tergiver推荐使用该模式更好的参考,我没有。我会鼓励你运用逻辑。具有20个事件的类有20个指针,即使没有任何这些事件的订阅者。使用Component.Events通过消除指针来减少类的足迹。我给出的链接在社区内容部分有一个例子。 Control.Events已经暴露(保护),所以你不必声明它。我不喜欢在示例中使用字符串键,而宁愿使用静态只读对象KeyIdentifier = new Object()。 – Tergiver 2010-12-16 20:05:03
什么是将此更改设置关闭?客户端窗口大小;代码等? – curtisk 2010-12-16 18:32:02
只有表单的ResizeBegin事件是这里的候选人。仅当列表视图停靠或锚定时才相关。其他任何事情都需要时间机器。 – 2010-12-16 20:24:40