Tag: 事件处理

在c#中处理listview上的滚动事件

我有一个listview,使用backgroundworker生成缩略图。 当滚动列表视图时,我想暂停背景工作并获得滚动区域的当前值,当用户停止滚动列表视图时,根据滚动区域的值从项目开始恢复背景工作。 是否可以处理列表视图的滚动事件? 如果有,怎么样? 如果不是那么根据我上面描述的内容,什么是一个好的选择呢?

为什么事件处理程序总是有返回类型的void?

嘿,我想知道为什么返回类型的事件如 private void button1_Click(object sender, EventArgs e) 永远无效? 它还可以返回任何其他值吗?

Winforms用户控制自定义事件

有没有办法提供用户控件自定义事件,并在用户控件中的事件上调用事件。 (我不确定调用是否是正确的术语) public partial class Sample: UserControl { public Sample() { InitializeComponent(); } private void TextBox_Validated(object sender, EventArgs e) { // invoke UserControl event here } } 和MainForm: public partial class MainForm : Form { private Sample sampleUserControl = new Sample(); public MainForm() { this.InitializeComponent(); sampleUserControl.Click += new EventHandler(this.CustomEvent_Handler); } private void CustomEvent_Handler(object sender, EventArgs […]

动态添加事件处理程序,在字符串中具有委托名称

我需要以这种方式为对象分配一个eventHandler: _Element.AddHandler(UIElement.MouseLeftButtonUpEvent, new RoutedEventHandler(Vars.Digit), true); 但实际上,我只有一个字符串,其中包含Vars对象实例中的“Digit”或其他方法名称。 使用reflection或其他技巧可以实现这一点吗? 谢谢。

C#Console App +事件处理

大家好。 我正在尝试查看在控制台应用程序中处理事件。 我宁愿不使用无声WinForms(虽然我明白这是一种方式)来做到这一点。 我读过一个类似的问题和它的回答。 请参阅下面的响应文本( 链接 ): STA线程的基本要求是它需要运行消息泵。 在Windows窗体中,您可以使用Application.Run。 或者您可以使用user32!GetMessage和DispatchMessage手动编写消息泵。 但是在WinForms或WPF中使用它可能更容易。 使用“user32 – > GetMessage”和“user32 – > DispatchMessage”的程序的基本结构是什么?

事件发生的次数越来越多

我有一个silverlight mvvm应用程序加载主视图,其中2个用户控件加载到2个ContentControls中,一个用列表框显示项目,另一个用编辑按钮。 当我单击编辑按钮时,2个新用户控件加载到ContentControls中,一个显示要编辑的数据(EditData),另一个显示保存和取消按钮(EditAction)。 当我单击“保存”按钮时,它会引发一个在单独的GlobalEvents.cs类中定义的事件,如: public event EventHandler OnSaveButtonClicked; public void RaiseSaveButtonClicked() { this.OnSaveButtonClicked(this, EventArgs.Empty); } 我在其他用户控件EditData中订阅它,因为我需要通过自定义EventArgs传输该编辑数据,所以我已经放入了它的ViewModel的构造函数: this.globalEvents.OnSaveButtonClicked += (s, e) => SaveData(); 并在保存数据中: public void SaveData() { globalEvents.RaiseSaveData(EditedGuy); } 这会引发另一个事件,将以前的用户控件加载到其ControlContent中,并在列表框中显示已编辑的数据。 多数民众赞成,但每当我点击编辑然后再次保存时,它会将事件提升两次,然后再提高3次,然后再提高4次,依此类推。 我怎样才能让它只被提升一次? 我认为这可能是因为每次我点击编辑,加载了一个用户控件的新实例,我不知道,也许订阅该事件,所以我试图粘贴 this.globalEvents.OnSaveButtonClicked -= (s, e) => SaveData(); 到Dispose()方法但没有成功。 我怎样才能做到这一点?

使用“Control.CheckForIllegalCrossThreadCalls = false”是不错的主意

我有一个从serialport接收数据的类。 我使用action delegate将数据传递到文本框中显示的表单。 事情是我无法访问textbox控件,因为它说: Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on 。 所以我设置Control.CheckForIllegalCrossThreadCalls = false ,它正在工作。 这样做是个好主意吗? 或者有更好的方法。 谢谢

检测表单何时关闭c#

我有一个我创建的WinForm,它显示一个带按钮的提示。 这是一个自定义的WinForm视图,因为消息框对话框还不够。 我有一个后台工作人员开始运行。 如果单击myForm上的按钮,我还想退出while( aBackgroundWorker.IsBusy )循环。 //MyProgram.cs using(CustomForm myForm = new CustomForm()) { myForm.Show(theFormOwner); myForm.Refresh(); while(aBackgroundWorker.IsBusy) { Thread.Sleep(1); Application.DoEvents(); } } 现在,在CustomForm , Button_clicked事件,我有 //CustomForm.cs private void theButton_Click(object sender, EventArgs e) { this.Close(); } 我是否需要向CustomForm类或我声明和初始化表单的位置添加更多代码以便能够检测到闭包?

带有自定义参数的EventHandler

我一直在寻找谷歌大约一个小时的答案,但我没有找到我正在寻找的确切内容。 基本上,我有一个静态助手类,可以帮助我在我的应用程序中经常执行许多操作。 在这种情况下,我有一个名为“CreateDataContextMenu”的方法,它在给定的TreeView控件上创建一个上下文菜单。 public static void CreateDataContextMenu(Form parent, TreeView owner, string dataType) { … } TreeView所有者是我将关联我的上下文菜单的控件。 然后我将Click事件添加到MenuItem,如下所示: menuItemFolder.Click += new System.EventHandler(menuItemFolder_Click); 我在这里遇到的问题是我想将“owner”和“dataType”作为参数传递给menuItemFolder_Click事件。 我尝试了以下方法: menuItemFolder.Click += new System.EventHandler(menuItemFolder_Click(sender,e,owner,dataType)); (…) private static void menuItemFolder_Click(object sender, System.EventArgs e, Treeview owner, string dataType) {…} 但它根本不起作用。 我这样做可能很天真,但我对事件处理程序还不太满意。 关于我如何做到这一点的任何想法? 我的第一个猜测是我需要为这个特定情况创建自己的EventHandler。 我是否朝着正确的方向前进?

如何删除所有Click事件处理程序?

可能重复: 如何删除Button的Click事件的所有事件处理程序? 我想从按钮中删除所有单击事件处理程序。 我在Stack Overflow问题中找到了这个方法如何从控件中删除所有事件处理程序 。 private void RemoveClickEvent(Button b) { FieldInfo f1 = typeof(Control).GetField(“EventClick”, BindingFlags.Static | BindingFlags.NonPublic); object obj = f1.GetValue(b); PropertyInfo pi = b.GetType().GetProperty(“Events”, BindingFlags.NonPublic | BindingFlags.Instance); EventHandlerList list = (EventHandlerList)pi.GetValue(b, null); list.RemoveHandler(obj, list[obj]); } 但是这一行总是返回null: typeof(Control).GetField(“EventClick”, BindingFlags.Static | BindingFlags.NonPublic); 这种方法写于2006年。 这个方法有最新版本吗? 注意:我正在使用WPF和.NET 4.0。