如何处理多个事件ARGS
我正在创建一个小型游戏.该引擎将有许多GUI可以订阅的事件.事件是: Ballsected BallDeselected BallMaved BallRemved 如果我只有一种球,这一切都很好,但是有X号球类型.它们都来自抽象球类. 每种球类型都有自己的动作,这些动作是在此事件发生的.他们都需要将不同的信息传递回GUI.例如,我有这两种球类型(更多的是减少这里的信息量). ballbouncing Ballexploding ballbouncing将需要告诉GUI它可能移至哪里,所以只会传递有关它的信息. 另一方面,ballexplodplods将摧毁周围的球.因此,它需要说出它是哪个球以及它已经摧毁的所有球. 这两种球类型都可以从同一事件中发射,但是有不同的事件ARG.我可以包括一个值的字典,但这并不是说明每种类型的自定义事件的明确词. 我还认为,如果我创建了一个自定义事件arg,它具有所涉及的球,然后从每个球类型中继承了球,
30 2024-04-26
编程技术问答社区
C# NumericUpDown.OnValueChanged,它是如何被改变的?
我想询问如何为现有事件处理程序制作自定义事件. 可以说,我有NumericUpDown numericUpDown控制,我希望处理程序的OnValueChanged事件.双击ValueChanged在Visual Studio中使片段像这样 private void numericUpDown_ValueChanged(object sender, EventArgs e) { } 但是,我想知道它是如何更改的(例如+5,-4.7),但是普通的EventArgs没有此信息.也许Decimal change = Value - Decimal.Parse(Text)可以解决这个问题(由于文本变化延迟),但这很难看,可能每次都无法正常工作. 我想我应该像这样做自己的eventargs class ValueChangedEventArgs : EventArgs { public Decimal Change { get; set; } } ,然后以
28 2024-04-25
编程技术问答社区
谁能用最通俗的语言向我解释如何使用EventArgs?
我知道他们与代表有关.我已经尝试过,但我仍然不理解如何使用这些.我对事件处理程序有所了解,但是我真正想知道的是如何使用大多数方法的一部分的普通旧事件.下面的示例 void Page_Load(object sender, EventArgs e) { myText.Value = "Hello World!"; } 感谢您的时间和考虑,我只是想成为我能成为的最好的编码器. Mike 解决方案 EventArgs类在提高事件时用作数据载体.它们通常包含与正在提出的事件有关的信息. 许多事件使用EventArgs类,其中不包含特定信息.该课程还作为所有其他EventArgs类的基类.更具体的EventArgs类的一个示例是 TreeNodeEventArgs 类,由许多事件使用,其中包含有关该事件与. 的信息. 在某些情况下,可以设计EventArgs类,以便它们允许事件处理程序将数据传达给提出事件的源的源,一个示例是 CancelEventArgs c
10 2024-04-23
编程技术问答社区
EventArgs.Empty clarification?
我有一种方法 protected void Item_Click(object sender, EventArgs e) { } 我希望其他代码调用此方法. (真的不需要sender nor e) 类似: Item_Click(null, null) ,但后来我想起了我可以使用EventArgs.Empty. 鼠标徘徊在上面: 等等...什么? EventArgs.Empty代表事件?它不是.它应该代表空参数而不是事件. 就像string.empty表示空字符串. 我在这里错过了什么吗? 解决方案 这只是糟糕的文档,一个单词将两个概念混为一谈. 最新文档看起来 Little 更好: 提供了与没有事件数据的事件一起使用的值. 问题是"事件"具有两个单独的含义: 您可以订阅的事件 该事件的单个"实例" 例如,说:"订阅KeyPress接收与键盘相关的事件的事件并不是不合理的." ("委托
8 2024-04-22
编程技术问答社区
在Xamarin窗体中点击/点击事件处理程序中传递对象
这是我的工作课: public class Job { public string Id{ get; set;} public string Name{ get; set;} } 这是我的listView: public class JobListePage:ContentPage { // Members private ListView lstView; // Constructor public JobListePage () { // Set members lstView = new ListView (); // Create job objects Job[] jobs = {new Job(){Id="1", Name="Benny
14 2024-04-18
编程技术问答社区
创建一个没有标准(Obj sender, EventArgs args)签名的事件处理委托有什么错?
我了解使用标准MS事件处理程序代表签名的好处,因为它使您可以轻松地扩展通过事件传递的信息,而无法打破基于旧代表签名的任何旧关系. 我想知道的是人们多久遵守此规则的频率?说我有一个这样的简单事件 public event NameChangedHandler NameChanged; public delegate void NameChangedHandler(Object sender, string oldName, string newName); 这是一个简单的事件,我几乎很肯定,我从纳马式事件中唯一需要了解的参数是其名称更改,旧名称和新名称的对象.因此,创建一个单独的namechangedeventargs类是值得的,或者对于这样的简单事件,只能直接通过代表参数返回参数? 是可以接受的吗? 解决方案 如果您是唯一必须处理它的人,则可以以错误的方式做任何事情.但是,学习标准并坚持它们并不是一个坏主意 所以我会让你达成协议.如果您保证以正确的方式进行操作
4 2024-04-18
编程技术问答社区
现在我们有了泛型,还需要EventArg类吗?
使用仿制药,是否有理由创建特定派生的EventArg类 似乎现在您可以简单地使用通用实现即时使用它们. 我应该去所有示例thorugh并删除我的EventArg类(StringEventargs,MyFooEventargs等) ) public class EventArgs : EventArgs { public EventArgs(T value) { m_value = value; } private T m_value; public T Value { get { return m_value; } } } 解决方案 您所描述的是 tupples ,用于特定目的的分组值.它们是功能编程的有用结构. 不利的一面是他们的价值观未命名,并且需要上下文才能理解. EventArgs从本质上讲,它们的本质通常远离其相关背景.因此,元组型EventArgs
22 2024-04-14
编程技术问答社区
为什么使用EventArgs.Empty而不是null?
我回想起在发射典型事件时多次和多个位置阅读: protected virtual OnSomethingHappened() { this.SomethingHappened(this, EventArgs.Empty); } e应该是eventargs. 我已经按照我的代码遵循了指导,但是我意识到我尚不清楚为什么这是首选技术.为什么规定的合同更喜欢eventargs.empty而不是null? 解决方案 我相信不是零零背后的推理是,当作为参数传递时,该方法不是需要潜在处理零参考异常的方法. 如果您通过null,并且该方法尝试使用E进行操作,它将获得null参考异常,而EventArgs.Empty将不会. 其他解决方案 EventArgs.Empty是 null object "> null对象模式. 基本上,拥有一个代表"无值"的对象以避免使用null时检查null. 其他解决方案 我相信EventArgs.Empty即使不需要
4 2024-04-14
编程技术问答社区
对象sender "和 "EventArgs e "参数的用途是什么?
在Page_Load,Init和其他页面事件的情况下,这些(object sender, EventArgs e)参数的用途是什么? 示例将更有帮助. 解决方案 EventArgs e是一个称为E的参数,其中包含事件数据,请参阅Eventargs MSDN页面. . Object Sender是一个称为发送者的参数,其中包含对升高事件的控制/对象的引用. 事件arg类: http://msdn.microsoft.com/en-us/library/system.eventargs.aspx 示例: protected void btn_Click (object sender, EventArgs e){ Button btn = sender as Button; btn.Text = "clicked!"; } 编辑: 单击按钮时,将触发BTN_Click事件处理程序. "对象发送者"部分将是对单击的按钮的引用 其他解决方案
4 2024-04-13
编程技术问答社区
为什么不使用自定义类而要继承EventArgs类?
我想知道为什么我要使用从EventArgs类继承的类,而不是使用在通过事件数据时为我完成相同工作的自定义类? 解决方案 您没有 从EventArgs继承,但是它允许使用您的类的人使用和处理通用*Handler(object sender, EventArgs e)声明. 如果您不继承EventArgs,则必须使用明确键入 *Handler(object sender, YairsFakeEventArgs e) 仅使用自定义代表,但它们的明显不同. . 其他解决方案 因为您的事件 - args类都将与接受EventArgs对象的任何其他功能兼容. 其他解决方案 因为这是在.NET中执行此操作的标准和最惯用的方法.整个ASP.NET和Winforms事件模型依赖于这些惯例.如果另一个开发人员阅读您的代码,他将更容易理解它,因为这是标准.说这当然可以使用您喜欢的任何课程.
12 2024-04-12
编程技术问答社区
我如何使一个偶发事件异步运行?
我正在编写一个视觉C#程序,该程序在辅助线程上执行连续的操作循环.有时,当该线程完成一个任务时,我希望它触发事件Handler.我的程序可以做到这一点,但是当事件处理程序触发时,辅助线程等待直到事件处理程序完成之前,然后继续线程.我该如何继续?这是我目前的结构化的方式... class TestClass { private Thread SecondaryThread; public event EventHandler OperationFinished; public void StartMethod() { ... SecondaryThread.Start(); //start the secondary thread } private void SecondaryThreadMethod() { ... OperationFinished(null, new EventArgs());
6 2024-04-11
编程技术问答社区
.NET是否有一个内置的EventArgs<T>?
我准备为携带单个参数的事件args创建通用事件类: public class EventArg : EventArgs { // Property variable private readonly T p_EventData; // Constructor public EventArg(T data) { p_EventData = data; } // Property for EventArgs argument public T Data { get { return p_EventData; } } } 在我这样做之前,c#是否具有与该语言相同的功能?我似乎记得当C#2.0出来时遇到了类似的事情,但是现在我找不到. 或换句话说,我必须创建自己的通用事件类,还是C#提供一个?感谢您的帮助. 解决方案 否.您可能正在考虑我个人不认为Ev
6 2024-04-11
编程技术问答社区
Jquery-用jquery传递asp按钮命令参数
我有ASP按钮: 和脚本: $("a").click(function () { var val = $(this).attr('id').toString(); $('.btn1').attr('CommandArgument',val); alert($('.btn1').attr('CommandArgument').toString()); $('.btn1').click(); }); 单击后,请提醒我命令参数.但是在下一步 - 当我触发btn1使用jQuery触发时,它将转到C
6 2024-03-08
编程技术问答社区
MouseEventArgs.X的类型是什么?
在Visual Studio 2008(.NET 3.5)中与C#合作.研究System.Windows.Forms.MouseEventArgs. 当我拦截处理MouseMove事件时,我会看到长面板的奇怪行为.看来MouseEventArgs.X从0到32767,并将其包裹到-32768. 当我在Visual Studio中观看变量时,它声称它是类型int. 显然,这是一个16位签名的整数,其表现方式.这是真的?这是硬限制吗? 谢谢! 解决方案 这可能来自以下事实:Windows表单基本上是C Windows API周围的.NET包装器.对于 wm_mousememove 等),鼠标坐标是在LPARAM参数中发送的. lparam是long_ptr的Typedef,在32位窗口上(仅)又是Typedef.正如WM_MouseMove的文档所说,您可以使用GET_X_LPARAM和GET_Y_LPARAM MACROS获得光标位置,它们分别返回低阶INT
14 2024-01-07
编程技术问答社区
如何在Button点击事件中访问Custom EventArgs类?
作为跟进: 自定义EventArgs类中的访问值 使用按钮单击或任何其他方法,如何在自定义EventArgs类中访问公共变量? 示例自定义事件args类: public class TraderEventArgs: EventArgs { private int _shares; private string _symbol; public TraderEventArgs(int shs, string sym) { this._shares = shs; this._symbol = sym; } public decimal Price { get {return _prices;} } public int Shares { get { return _shares; } } } button_
24 2024-01-04
编程技术问答社区
在事件声明中正确地使用泛型
我有一个我传递的数据对象: public class TimedResult { public ResultRequest Request { get; set; } public T Data { get; set; } public TimeSpan TimeTaken { get; set; } } 在我的经理课上,我做了一些工作,这引起了一个事件: public void Execute(ResultRequest request) { var result = new TimedResult(); // fill data object here OnResult(result); } 我制作了OnResult方法通用: protected virtual void OnResult(TimedResult result) { if (Result != n
24 2023-04-14
编程技术问答社区
为什么对EventHandler<TEventArgs>没有约束?
我只是偶然地发现(当我认为不会编译的东西时)事件Handler是不是 被限制在type system.eventargs. 这是内联文档: #region Assembly mscorlib.dll, v4.0.0.0 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll #endregion namespace System { // Summary: // Represents the method that will handle an event. // // Parameters: // sender: // The source of the event. // // e: // An System.EventArgs
36 2023-02-09
编程技术问答社区
创建一个没有标准(Obj sender, EventArgs args)签名的事件处理委托有什么错?
我了解使用标准MS事件处理程序委托签名的好处,因为它使您可以轻松地扩展通过事件传递的信息,而无法打破基于旧委托签名的任何旧关系. 我想知道的是人们多久遵守此规则的频率?说我有一个这样的简单事件 public event NameChangedHandler NameChanged; public delegate void NameChangedHandler(Object sender, string oldName, string newName); 这是一个简单的事件,我几乎是很肯定的是,我从纳马式事件中唯一需要知道的论点是其名称,旧名称和新名称的对象.因此,创建一个单独的namechangedeventargs类是值得的,或者对于这样的简单事件,只能直接通过代表参数返回参数? 是可以接受的吗? 解决方案 如果您是唯一必须处理它的人,则可以以错误的方式做任何事情.但是,学习标准并坚持它们并不是一个坏主意 所以我会让你达成协议.如果您保证以正确的方式进行操
30 2022-09-12
编程技术问答社区
asp.net :如何使用eventargs在按钮onclick上传递参数?
我已经看到了一些代码,人们通过Web Control的CommandParameter属性传递参数.该活动是什么是使用Eventargs. 解决方案 如果您对不同按钮具有相同的eventHandler方法,这可能是有用的.例如,说你的标记看起来像这样: 您可以对两个按钮具有相同的事件处理程序,并根据CommandName进行区分: protected void MyBtnHandler(O
1504 2022-07-19
编程技术问答社区