Csharp/C#教程:基本的GUI事件处理问题C#分享


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

下午好,

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

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

非常感谢,J

首先使用C#,我们如何将事件链接到对象 – 我猜测事件处理程序? 如果是这样,每个处理程序可以使用单独

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

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"); }; } } 

事件处理程序如何定位它必须操作的对象?

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

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

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

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

每个事件实际上都是一个委托 – 您使用此表示法向此委托注册事件处理程序:

 myButton.Click += new EventHandler(myEventHandler); 

这样,当按钮单击事件触发时,其调用列表上的任何事件处理程序(在这种情况下,这将包括myEventHandler函数)。

对于每个按钮,您都会执行相同操作并注册要触发的事件处理程序(对于多个按钮,可以是相同的事件处理程序)。

也许这个MSDN话题将会有所启发: 事件和代表 。

在Visual Studio中使用设计器,您可以轻松使用GUI对象处理程序。 通过单击“闪电”按钮,您将看到所有可用的事件以进行细部控制。 通过在所选事件上单击两次,IDE将为您生成方法存根。

  private void button_Click(object sender, EventArgs e) { //sender is the object which actually raised the event ((Button)sender).Text = "Clicked Me"; } 

像这样添加事件处理程序(在* .Designer.cs文件中自动完成)

  button.Click += new System.EventHandler(this.button_Click); 

这取决于您使用的UI库。 在WPF中,您在XAML中定义事件处理程序:

  // this is in your .cs code file private void HelloWorldClickEventHandler(object sender, RoutedEventArgs e) { // some code } 

在WinForms中,您在表单的构造函数中附加处理程序:

 public MyForm() { // ... HelloWorldButton.Click += new EventHandler(HelloWorldClickEventHandler); } private void HelloWorldClickEventHandler(object sender, EventArgs e) { // some code } 

当然,使用像Visual Studio这样的IDE可以简化这个过程。

事件处理程序如何定位它必须操作的对象?

有两种方法可以访问相关对象:

上述就是C#学习教程:基本的GUI事件处理问题C#分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/943053.html

(0)
上一篇 2021年11月13日
下一篇 2021年11月13日

精彩推荐