Tag: events

在C#中捕获并发送键盘/鼠标输入

我正在寻找一种发送和接收键盘信息的方法,无论应用程序有什么焦点。 我记得回到大学时看到一个关于旧Windows API的演示文稿,它可以让你改变光标位置并发送正确的点击等。 除了User32.dll有没有办法用.net框架做到这一点?

事件订阅者是按订阅顺序调用的吗?

假设按订阅顺序调用事件订阅者是否安全? 例: void One(object sender, EventArgs e) {} void Two(object sender, EventArgs e) {} event EventHandler foo; foo += One; foo += Two; 当事件被触发时,One()总是在Two()之前调用吗? 编辑: 你应该不依赖它,我只是想。 这个想法是,多播代表与COMMAND模式类似。 所以我只是想知道。 通常你会使用一个保存COMMAND命令的集合,这样你就可以撤消/重做/无论如何。

虚拟事件如何在C#中运行?

以下是我用于测试的程序。 它打印(如预期): Raise A Event from A Raise B Event from B 现在,如果我们改变Main的前两行是: A a = new B(); B b = new B(); 该计划将打印: Raise A Raise B Event from B 这也是预期的,因为重写事件会隐藏基类中的私有支持字段,因此基类触发的事件对派生类的客户端不可见。 现在我将相同的行改为: B b = new B(); A a = b; 程序开始打印: Raise A Raise B Event from A Event from B 这是怎么回事? class […]

C#显式删除事件处理程序

我想知道将对象设置为null是否会清除附加到对象事件的任何事件处理程序… 例如 Button button = new Button(); button.Click += new EventHandler(Button_Click); button = null; button = new Button(); button.Click += new EventHandler(Button_Click); button = null; 等等… 这会导致内存泄漏吗?

Xamarin.Forms – 按下按钮并释放事件

我希望我的事件在按下和释放按钮时触发,但我只能在Xamarin.Forms中找到Click事件。 我相信必须有一些工作来获得这个function。 我的基本需求是在按下按钮时启动一个过程,在释放按钮时停止 。 它似乎是一个非常基本的function,但Xamarin.Forms现在没有它。 我在按钮上尝试了TapGestureRecognizer,但按钮只触发了点击事件。 MyButton.Clicked += (sender, args) => { Log.V(TAG, “CLICKED”); }; var tapGestureRecognizer = new TapGestureRecognizer(); tapGestureRecognizer.Tapped += (s, e) => { Log.V(TAG, “TAPPED”); }; MyButton.GestureRecognizers.Add(tapGestureRecognizer); 请记住,我需要这些事件在Android和iOS中正常工作。

当一个事件有多个订阅者时,如何获得每个订阅者的返回值?

代码如下所示: 时钟: public class Clock { public event Func SecondChange; public void Run() { for (var i = 0; i < 20; i++) { Thread.Sleep(1000); if (SecondChange != null) { //how do I get return value for each subscriber? Console.WriteLine(SecondChange(DateTime.Now)); } } } } DisplayClock: public class DisplayClock { public static bool TimeHasChanged(DateTime now) { […]

NotifyPropertyChanged事件,其中事件args包含旧值

是否有类似INotifyPropertyChanged的接口,其中事件args包含要更改的属性的旧值,或者我是否必须扩展该接口以创建一个? 例如: public String ProcessDescription { get { return _ProcessDescription; } set { if( value != ProcessDescription ) { String oldValue = _ProcessDescription; _ProcessDescription = value; InvokePropertyChanged(“ProcessDescription”, oldvalue); } } } InvokePropertyChanged(String PropertyName, OldValue) { this.PropertyChanged( new ExtendedPropertyChangedEventArgs(PropertyName, OldValue) ); } 我也会讨论类似PropertyChanging的事件,它提供这些信息,无论它是否支持e.Cancel。

.NET 4.0和C#4.0中的事件和委托逆转

在调查这个问题时,我对C#4.0中新的协方差/逆变特性将如何影响它感到好奇。 在Beta 1中,C#似乎不同意CLR。 回到C#3.0,如果你有: public event EventHandler Click; ……然后你在其他地方: button.Click += new EventHandler(button_Click); …编译器会barf因为它们是不兼容的委托类型。 但是在C#4.0中,它编译得很好,因为在CLR 4.0中,类型参数现在标记为in ,因此它是逆变的,因此编译器假定多播委托+=将起作用。 这是我的测试: public class ClickEventArgs : EventArgs { } public class Button { public event EventHandler Click; public void MouseDown() { Click(this, new ClickEventArgs()); } } class Program { static void Main(string[] args) { Button button = new Button(); […]

如何使用触发器将事件参数传递给命令?

所以我有一个简单的设置,一个带有Populating事件的自动完成框,我想绑定到一个命令。 我用 clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity (这有更好的命名空间吗?) 绑定它并不是什么大不了的事,最重要的是将PopulatingEventArgs参数传递给bound命令。 那么如何根据PRISM的最佳实践和一般的MVVM来做到这一点呢?

在KeyDown事件后删除延迟?

当我在游戏中按住键来移动我的玩家时: public void MainForm_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Up) { Player.MoveUp(); } } 当我按下向下箭头时,玩家立即移动一步,然后暂停一小段时间,然后再开始平稳移动。 这是为什么? 我该怎样预防呢?