2011-10-17 27 views
3

我剛剛開始一起學習F#和C#。以下F#代碼是來自Chris Smith編程F#書籍的稍微調整過的示例 。這個簡單的F#代碼的C#版本是用來構造一個基本的Windows.Form的?

C#中的等價物看起來像什麼?

open System.Windows.Forms 

let form = new Form(Text="Click Me", TopMost=true) 

form.MouseClick.AddHandler(
    new MouseEventHandler(
    fun sender clickArgs -> printfn "MouseClickEvent @ [%d, %d] %O" clickArgs.X clickArgs.Y clickArgs.Button 
) 
);; 

form.ShowDialog();; 
+0

FWIW,這裏是連接到從F#是單擊事件的一個稍微習慣的方法:'form.MouseClick |> Event.add(有趣的clickArgs - > printfn「MouseClickEvent @ [%d,%d]%O」clickArgs.X clickArgs.Y clickArgs.Button)' –

回答

6

在黑暗中摸索,因爲我不知道F#的,但這裏有雲:

using System.Windows.Forms; 

namespace Answer 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Form form = new Form { Text = "Click Me", TopMost = true }; 

      form.MouseClick += (s, e) => { 
       System.Console.WriteLine("MouseClickEvent @ [{0}, {1}] {2}", 
        e.X.ToString("d"), 
        e.Y.ToString("d"), 
        e.Button.ToString() 
       ); 
      }; 

      form.ShowDialog(); 
     } 
    } 
} 
+0

您可以解釋一下'form.Click + = etc.'構造是或給我的期限,所以我可以看看它? – dan

+0

@dan:'(s,e)=> {...}'位被稱爲lambda表達式。這是一種(簡單的)方式來指定事件處理程序委託,您想用C#訂閱事件('+ =') - http://msdn.microsoft.com/zh-cn/library/ms366768.aspx – BoltClock

+0

+1擊敗我!我只會爲e.X和e.Y添加ToString(「d」)。我正在找出「%O」說明符是什麼。 –

相關問題