Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有一种流畅的方法来处理WinForm事件?_C#_Winforms_Fluent - Fatal编程技术网

C# 是否有一种流畅的方法来处理WinForm事件?

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

我正在处理一个用户控件中的另一个KeyDown事件,当时我想知道是否存在一个库,用于键入流畅的代码来处理类似这样的事件

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()));