【问题标题】:Left mouse button click detect on winform using Reactive extensions IObservable on events鼠标左键单击在 Winform 上使用 Reactive 扩展 IObservable 事件检测
【发布时间】:2011-06-09 19:56:56
【问题描述】:

刚开始阅读响应式扩展。我正在尝试观看一个简单的鼠标左键单击我的 winform。意思是任何有点击的地方(在表单上的任何控件上,包括表单)我只想显示一条消息“检测到点击”。到目前为止我有

var mouseDown = Observable.FromEvent<MouseButtonEventArgs>(frmMain, "MouseDown");
//missing code please fill here 
mouseDown.Subscribe(() => Debug.WriteLine("left click detected.");

我知道第一行会检测到任何鼠标事件。我只想单击鼠标左键。请发布工作代码,以便我更好地理解这一点。现在正处于我以前从未使用过的流行语的混乱中,比如 .takeuntil 等。 进一步完善我的问题。

的 Rx 等价物是什么
protected override void WndProc(ref Message m)
{
    Console.Writeline("{0}", m.Msg);
}

这应该观察每个可观察到的鼠标或键盘事件。 谢谢你

【问题讨论】:

标签: c# system.reactive reactive-programming


【解决方案1】:

抱歉,我不确定这是否是有效的代码(现在无法尝试),但它应该可以帮助您入门。

var mouseDown = Observable.FromEvent<MouseButtonEventArgs>(frmMain, "MouseDown")
                      .Where(x => x.LeftButton == MouseButtonState.Pressed);

mouseDown.Subscribe(() => Debug.WriteLine("left click detected.");

【讨论】:

  • 谢谢克里斯。 var mouseDown = Observable.FromEvent(this,"MouseDown") 编译器错误。我正在表单上的按钮单击事件上尝试此代码。这是指形式。 Intellisense 不显示 MouseButtonEventArgs,所以我正在尝试 MouseEventArgs。我现在已经下载并安装了 rx sdk(与 2010 相比,.net 4.0),添加了 system.reactive 参考。亚马逊上只有一本关于响应式扩展的书。那也还没有发布。现在我正在学习stackoverflow.com/questions/1596158/…
  • 我猜我没有看到 MouseButtonEventArgs,因为我没有使用 wpf。这个问题与winforms有关。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 2017-09-30
  • 2019-08-22
相关资源
最近更新 更多