C# 是否有一种流畅的方法来处理WinForm事件?
我正在处理一个用户控件中的另一个KeyDown事件,当时我想知道是否存在一个库,用于键入流畅的代码来处理类似这样的事件C# 是否有一种流畅的方法来处理WinForm事件?,c#,winforms,fluent,C#,Winforms,Fluent,我正在处理一个用户控件中的另一个KeyDown事件,当时我想知道是否存在一个库,用于键入流畅的代码来处理类似这样的事件 editor.When(Keys.F).IsDown().With(Keys.Control).Do((sender, e) => ShowFindWindow()); 这是否存在?.NET4将引入反应式框架(IObservable,IObserver和helper扩展类型),它应该提供这一点。我认为这是一个挑战,这可以让我了解什么是Fluent,所以我编写了一个Flu
editor.When(Keys.F).IsDown().With(Keys.Control).Do((sender, e) => ShowFindWindow());
这是否存在?.NET4将引入反应式框架(
IObservable
,IObserver
和helper扩展类型),它应该提供这一点。我认为这是一个挑战,这可以让我了解什么是Fluent,所以我编写了一个Fluent键盘类。我不认为我遵守了所有流利的语言结构和规则,但它是有效的
辅助扩展方法
/// <summary>
/// Provides a set of static (Shared in Visual Basic) methods for starting a fluent expression on a <see cref="System.Windows.Form.Control"/> object.
/// </summary>
public static class ControlExtensions
{
/// <summary>
/// Starts a fluent expression that occurs when a key is pressed.
/// </summary>
/// <param name="control">The control on which the fluent keyboard expression is occuring.</param>
/// <param name="keys">The key when it will happen.</param>
/// <returns>A <see cref="KeyboardFluent"/> object that makes it possible to write a fluent expression.</returns>
public static KeyboardFluent When(this Control control, Keys keys)
{
return new KeyboardFluent(control).When(keys);
}
}
只有当按下Ctrl+F时,它才会显示messagebox。我下载了.Net Framework 3.5 SP1的
我也能做到这一点:
Observable.FromEvent<KeyEventArgs>(this, "KeyDown")
.Where(e => e.EventArgs.KeyCode == Keys.F && e.EventArgs.Modifiers == Keys.Control)
.Subscribe(e => MessageBox.Show(e.EventArgs.KeyData.ToString()));
Observable.FromEvent(此为“键控”)
.Where(e=>e.EventArgs.KeyCode==Keys.F&&e.EventArgs.Modifiers==Keys.Control)
.Subscribe(e=>MessageBox.Show(e.EventArgs.KeyData.ToString());
这是一个非常强大的东西。被动框架没有提供一个流畅的界面。它为事件提供LINQ,这是完全不同的。我试着做同样的事情,但它却完美地工作了,有更多的选择。好主意!我没见过这样的东西,也许杰里米·米勒在StoryTeller()上做过一些工作?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.When(Keys.F).With(Keys.Control).IsDown().Do((sender, e) => MessageBox.Show(e.KeyData.ToString()));
}
}
Observable.FromEvent<KeyEventArgs>(this, "KeyDown")
.Where(e => e.EventArgs.KeyCode == Keys.F && e.EventArgs.Modifiers == Keys.Control)
.Subscribe(e => MessageBox.Show(e.EventArgs.KeyData.ToString()));