Tag: 事件

用户帮助的所有控件的全局事件处理程序

嗨,我正在扩展一个用C#编写的Windows应用程序,以便在用户点击F1键时为用户提供帮助(在聚焦控件的上下文中)。 我想要做的是使用Control.HelpRequested事件,但我不知道如何扩展所有控件来处理此事件。 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.helprequested.aspx 使用“手动”更新每个控件以处理此事件并不是真的可行,我真的不喜欢循环遍历表单中的所有控件(如表单打开)以关联事件处理程序的想法。 是否有一种简洁的方法来扩展表单的所有控件来处理特定事件? 这只是弥补,但我几乎觉得我应该能够写出这样的东西 [HandleEvent Control.HelpRequested,ApplyTo Typeof(Control)] void MyEventHandler(object sender,EventArgs e) { //处理事件的代码…… } 任何关于不同方法的建议或想法都非常感谢 – 谢谢

您能想到.NET中具有同步上下文的事件模式吗?

主要问题是,从一个线程引发事件可以调用应该只在某个线程上下文中调用的委托。 在对这个问题做了一些研究后,我想,也许它可以传递某种同步上下文以及每个订阅事件: SomeClass.SmartSyncEvent += (myDelegate, someReferenceToAThread); 然后提出事件,它以某种方式: foreach(subscriber) { someReferenceToAThread.Invoke(myDelegate); } 这是超伪代码,但也许有人已经做过这样的事情,或者知道任何可以设置这种模式的.NET类。 谢谢!

“转发事件时,委托给实例方法不能为’this’”

我试图通过类Server将我的类Client上的事件OnClientMessage转发到我的libary之外。 Client.cs public class Client { private TcpClient tcpClient; private StreamWriter writer; private Boolean alive = true; private int id; public delegate void OnClientMessageHandler(Client sender, String message); public delegate void OnClientDisconnectHandler(Client sender); public event OnClientMessageHandler OnClientMessage; public event OnClientDisconnectHandler OnClientDisconnect; public Client(TcpClient tcpClient, int id) { this.tcpClient = tcpClient; this.id = id; writer = new […]

用户控件之间的ASP.NET事件委派

在ASP.NET页面上提供以下控件层次结构: 页 HeaderControl( 用户控件 ) TitleControl( 服务器控件 ) TabsControl( 用户控件 ) 其他控件 我正在尝试在TitleControl中引发一个事件(或一些通知),它会冒泡到Page级别。 然后,我想(可选) 在Page codebehind注册一个事件处理程序,它将采用EventArgs并修改上面示例中的TabsControl。 需要注意的重要一点是,这个设计允许我将这些控件放到任何页面中,并在事件处理程序连线时使整个系统无缝地工作。 该解决方案不应该涉及对FindControl()的调用,因为它成为一个强大的关联。 如果在包含的页面中没有定义处理程序,则事件仍由TitleControl引发但不处理。 我的基本目标是使用基于事件的编程,以便我可以将用户控件彼此分离。 TitleControl中的事件仅在某些情况下引发,这似乎是(在我的脑海中)首选方法。 但是,我似乎无法找到一种干净利落的方法。 以下是我的(差)尝试: 使用HttpContext.Current.Items 将EventArgs添加到TitleControl上的Items集合中,并在TabsControl上将其拾取。 这可行,但由于两个控件之间的连接不明显,因此从根本上难以破译。 使用reflection 而不是传递事件,直接在TitleControl中查找容器页面上的函数,如: Page.GetType().GetMethod(“TabControlHandler”).Invoke(Page, EventArgs); 这将起作用,但方法名称必须是一个常量,所有Page实例必须逐字定义。 我确信我过度思考这个问题并且必须有一个更漂亮的解决方案使用委托,但我似乎无法想到它。 有什么想法吗?

使用新委托实例取消注册事件

EventHandler a = new EventHandler(control_RegionChanged); EventHandler b = new EventHandler(control_RegionChanged); if (a == b) { Console.WriteLine(“Same!”); } else { Console.WriteLine(a.GetHashCode() + ” ” + b.GetHashCode()); } 这写得Same! 到控制台。 control.RegionChanged += new EventHandler(control_RegionChanged); control.RegionChanged -= new EventHandler(control_RegionChanged); 执行此代码后, EventHandler未注册?

在C#中优化多个调度通知算法?

抱歉标题,我想不出更好的方式来描述问题。 基本上,我正在尝试在游戏中实现碰撞系统。 我希望能够注册一个“碰撞处理程序”来处理可以转换为特定类型的两个对象(按任意顺序给出)的任何碰撞。 因此,如果Player : Ship : Entity和Laser : Particle : Entity ,以及(Ship, Particle)和(Laser, Entity)处理程序被注册而不是(Laser, Player)的碰撞,则应通过参数通知两个处理程序按正确的顺序, (Laser, Laser)的碰撞应该只通知第二个处理程序。 一个代码片段说了千言万语,所以这就是我现在正在做的事情(naieve方法): public IObservable<Collision> onCollisionsOf() where T1 : Entity where T2 : Entity { Type t1 = typeof(T1); Type t2 = typeof(T2); Subject<Collision> obs = new Subject<Collision>(); _onCollisionInternal += delegate(Entity obj1, Entity obj2) { if (t1.IsAssignableFrom(obj1.GetType()) && t2.IsAssignableFrom(obj2.GetType())) […]

请问处理程序我的事件立即返回是否可以?

我正在写一个.NET库。 其中一个类具有库的用户需要订阅的事件。 可以问这些事件的处理程序实现快速返回吗? 或者这是一个常见的问题,有一个共同的解决方案? (如果处理程序需要很长时间也不会致命 – 但是如果他们的处理程序需要的时间超过半秒,事情就会开始出错 – 这是一个网络库,并且连接的对等体会认为这个对等体已经丢失了发送回复的主题) 例如 public delegate void Ping(); class A { /// /// If your handler doesn’t return quickly… I am going to cry. /// public event Ping Ping; private void RaisePing() { var handler = Ping; if(handler != null) handler(); } // this is called several times a […]

.NET委托是否用于事件?

我有点困惑,我知道委托就像函数指针一样,它们用于将函数作为参数传递给方法。 这如何适合事件模型? 呼叫: myButton.OnClick += new …..(); 在事件发生时,内部只是将方法/函数作为参数传递,并且所有订阅者都会收到有关该事件的通知吗?

什么是C#中的事件?

在c#什么是事件? 它与ActionScript事件类似吗? 有什么不同吗? 在什么?

C# – 加载表单后是否有任何事件被触发?

我想在第一次使用该程序时为用户提供使用教程的选项。 我尝试在Form.Load事件中添加它,但表单在弹出Form.Load后显示。 这就是为什么我想知道,加载表格后是否有任何事件被解雇? 如果没有,有没有办法在加载后立即执行操作?