Tag: 事件

C#:String作为事件的参数?

我有一个用于表单的GUI线程和另一个计算事物的线程。 表单有一个richtTextBox。 我希望worker-thread将字符串传递给表单,以便每个字符串都显示在文本框中。 每次在工作线程中生成一个新字符串时,我都会调用一个事件,现在应该显示该字符串。 但我不知道如何传递字符串! 这是我到目前为止所尝试的: ///// Form1 private void btn_myClass_Click(object sender, EventArgs e) { myClass myObj = new myClass(); myObj.NewListEntry += myObj_NewListEntry; Thread thrmyClass = new Thread(new ThreadStart(myObj.ThreadMethod)); thrmyClass.Start(); } private void myObj_NewListEntry(Object objSender, EventArgs e) { this.BeginInvoke((MethodInvoker)delegate { // Here I want to add my string from the worker-thread to the textbox! richTextBox1.Text […]

使用带有滚动条的任何控件时,不会触发MouseWheel事件(在C#Windows窗体中)

当我使用带有滚动条的任何控件(ListBox,Panel,TextBox)时,MouseWheel事件不会触发。 重现问题: public class Form1 : Form { private readonly Button button1; private readonly TextBox textBox1; private void button1_MouseWheel(object sender, MouseEventArgs e) { ToString(); // doesn’t fire when uncomment lines below } public Form1() { button1 = new Button(); textBox1 = new TextBox(); SuspendLayout(); button1.Location = new System.Drawing.Point(80, 105); button1.Size = new System.Drawing.Size(75, 23); button1.MouseWheel […]

事件监听器是否仅限于只有一个用户?

是否可以阻止多个订阅者订阅活动? 我已经创建了一个快速示例代码片段来给我的问题一些上下文,但不幸的是我现在无法测试它,因为我不在我的VS机器上。 目标是: 如果没有订阅者,则返回空列表。 返回单个订户的返回值。 如果多个订户尝试订阅该事件,则抛出exception( 这是问题的关键 )。 这可能吗? public delegate List GetWindowListDelegate(); public static event GetWindowListDelegate GetWindowListEvent; public List GetWindowList() { if (GetWindowListEvent == null) { return new List(); } return GetWindowListEvent(); } 注意:我使用的是.NET 3.5 sp1。

C# – System.Windows.Forms.Keys – 如何将应用程序热键保存在一个地方

我的应用程序中没有“热键”。 所有“热键”序列在应用范围内都是唯一的(例如,F12键将始终触发相同的单个任务)。 在很少的地方像这里处理: if (e.Modifiers == Keys.Shift && e.KeyCode == Keys.Delete) { this.Close(); } if (e.Modifiers == Keys.Shift && e.KeyCode == Keys.Up) { if (Program.PerformLogin()) { frmConfigurationSetup frmSetup = new frmConfigurationSetup(); frmSetup.Show(); } } if (e.KeyCode == Keys.F12) { frmAbout formAbout = new frmAbout(); formAbout.Show(); } 但我有想法将我的应用程序中使用的所有键盘快捷键保存在一个地方。 我想把它们放在Constants.cs文件中: public const System.Windows.Forms.Keys ShowAboutForm = System.Windows.Forms.Keys.F12; 但是如何在这个序列的情况下实现这个:e.Modifiers […]

事件提升和.net 4.5中的阅读介绍

我有与此MSDN杂志文章相关的问题。 阅读简介正如我刚才所解释的,编译器有时会将多个读取融合为一个。 编译器还可以将单个读取拆分为多个读取。 在.NET Framework 4.5中,读取介绍比读取消除要少得多,并且仅在非常罕见的特定情况下发生。 但是,它有时会发生。 public class ReadIntro { private Object _obj = new Object(); void PrintObj() { Object obj = _obj; if (obj != null) { Console.WriteLine(obj.ToString()); // May throw a NullReferenceException } } void Uninitialize() { _obj = null; } } 如果检查PrintObj方法,obj.ToString表达式中的obj值似乎永远不会为null。 但是,该行代码实际上可能会抛出NullReferenceException。 CLR JIT可能会编译PrintObj方法,就好像它是这样编写的: void PrintObj() { if (_obj != […]

VB等效的C#事件创建

我正在尝试将GridView类扩展为始终显示页眉和页脚,即使数据源为空时也使用我在网上找到的代码( 链接 )。 但是,代码是用C#编写的,但我使用的是VB。 什么是以下的VB等价物? public event MustAddARowHandler MustAddARow; 有没有办法绕过VB.NET不允许事件返回一个类型? 此外,由于下面的错误,我无法转换以下function。 码: Protected Function OnMustAddARow(ByVal data As IEnumerable) As IEnumerable If MustAddARow = Nothing Then ‘Error on MustAddARow’ Throw New NullReferenceException(“The datasource has no rows. You ” _ & “must handle the ‘MustAddARow’ Event.”) End If Return MustAddARow(data) ‘Error on MustAddARow’ End Function 错误:公共事件MustAddARow(data As […]

如何等待C#事件被提升?

我有一个Sender类,它在IChannel上发送一条Message : public class MessageEventArgs : EventArgs { public Message Message { get; private set; } public MessageEventArgs(Message m) { Message = m; } } public interface IChannel { public event EventHandler MessageReceived; void Send(Message m); } public class Sender { public const int MaxWaitInMs = 5000; private IChannel _c = …; public Message Send(Message […]

拦截C#中应用程序中所有控件的单击事件(WinForms)

我想创建一个应用程序来截取我的应用程序的所有forms的所有UI事件,并将它们写入日志。 这些数据可用于查看哪些控件使用最多,顺序是什么等。问题是我希望这是自动发生的,而不修改现有的类。 我制作了一个原型,将一个方法附加到表单中所有控件的click事件,但是如何为所有表单执行此操作? 在操作事件时,Reflection需要一个目标对象,但只能轻松访问启动表单。 有没有办法挂钩对象的构造函数? 然后我可以在新表格的所有事件中“注入”我的方法。 或许还有另一种方法可以做到这一点。 提前致谢!

如何将变量传递给按钮事件方法?

当我单击按钮时,我需要能够将两个对象传递给被触发的方法。 我该怎么做呢? 到目前为止,我一直在寻找创建一个已更改的eventArgs: public class CompArgs : System.EventArgs { private object metode; private Type typen; public CompArgs(object m, Type t) { this.metode = m; this.typen = t; } public object Metode() { return metode; } public Type Typen() { return typen; } } 但是我该如何使用它呢? 是否有可能以某种方式覆盖按钮的单击事件以使用自定义事件处理程序,它将CompArgs作为参数? private void button1_Click(object sender, EventArgs e) { Assembly assembly = […]

整个窗口上的MouseHover / MouseLeave事件

我有Form子类,带有MouseHover和MouseLeave处理程序。 当指针位于窗口的背景上时,事件工作正常,但当指针移动到窗口内的控件上时,它会导致MouseLeave事件。 无论如何有一个覆盖整个窗口的事件。 (.NET 2.0,Visual Studio 2005,Windows XP。)