从F#中的事件处理程序获取按钮文本

时间:2013-11-02 08:11:35

标签: .net f# functional-programming

如何在按钮单击事件处理程序中获取单击的按钮文本?

let buttonClick args = 
  let rnd = new Random()
  //MessageBox.Show(button.Text)
  let r, g, b = rnd.Next(256), rnd.Next(256), rnd.Next(256)
  form.BackColor <- Color.FromArgb(r, g, b)

for x = 0 to 3 do
  for y = 0 to 3 do
    let button = new Game15Button(new Point(x, y))
    button.Size <- new Size(50, 50)
    button.Click.Add(buttonClick)
    form.Controls.Add(button)

1 个答案:

答案 0 :(得分:1)

您可以将buttonClick函数更改为获取2个参数,其中添加的参数将是调用者知道的按钮文本。但是现在你不能将此函数指定为按钮单击的事件处理程序,因为它只需要获取1个参数。一种解决方案是使用带有1个参数的lambda函数,该函数使用按钮文本调用buttonClick函数,并将其参数作为第二个参数传递。

将您的事件处理程序更改为

let buttonClick text args = 
  let rnd = new Random()
  MessageBox.Show(text)
  let r, g, b = rnd.Next(256), rnd.Next(256), rnd.Next(256)
  form.BackColor <- Color.FromArgb(r, g, b)

以及将处理程序分配给点击的行

button.Click.Add(fun args -> buttonClick button.Text args)