基本的GUI事件处理问题C#

基本的GUI事件处理问题C#,第1张

概述下午好, 我有一些关于GUI事件处理的基本问题.首先使用C#,我们如何将事件链接到对象 – 我猜测事件处理程序?如果是这样,每个处理程序可以使用单独 – 事件处理程序如何定位它必须 *** 作的对象? 我对JAVA中的工作原理有一个大概的了解.指向我的参考将是好的 – 我已经搜索谷歌的答案无济于事. 非常感谢, Ĵ Firstly with C# how can we link events to obj 下午好,

我有一些关于GUI事件处理的基本问题.首先使用C#,我们如何将事件链接到对象 – 我猜测事件处理程序?如果是这样,每个处理程序可以使用单独 – 事件处理程序如何定位它必须 *** 作的对象?

我对JAVA中的工作原理有一个大概的了解.指向我的参考将是好的 – 我已经搜索谷歌的答案无济于事.

非常感谢,
Ĵ

解决方法

Firstly with C# how can we link events
to objects – I am guessing event
handlers? If so can each handler use
separate code?

是的,每个事件处理程序都有自己的代码:

class A {    public event EventHandler SomeEvent;}class B {    public B(A a) {        a.someEvent += (sender,e) => { Console.Writeline("B's handler"); };    }}class C {    public C(A a) {        a.someEvent += (sender,e) => { Console.Writeline("C's handler"); };    }}

How can the event handler locate the
objects it must manipulate?

我将过多地简化这一点,但事件处理程序本质上是围绕观察者模式的包装器.与任何其他Delegate类型一样的EventHandlers在方法调用列表中保存订阅者列表(参见Delegate.GetInvocationList).你可以这样想:

class EventHandler {    linkedList<Action<object,EventArgs>> subscribers =        new linkedList<Action<object,EventArgs>>();    public voID Add(Action<object,EventArgs> f) {        subscribers.AddLast(f);    }    public voID Remove(Action<object,EventArgs> f) {        subscribers.Remove(f);    }    public voID Invoke(object sender,EventArgs e) {        foreach(Action<object,EventArgs> f in subscribers)            f(sender,e);    }}

(上面的代码与真实事件处理程序类的实际实现细节相去甚远.委托类型是不可变的,因此添加一个处理程序返回一个新的Delegate,添加了处理程序而不是改变处理程序.我相信他们的Add /删除方法也有很多线程伏都教.)

由于委托实例拥有对每个订阅者的引用,因此它可以直接访问它 *** 作的任何对象.

总结

以上是内存溢出为你收集整理的基本的GUI事件处理问题C#全部内容,希望文章能够帮你解决基本的GUI事件处理问题C#所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1223057.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存