[C#将回调传递给按钮
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C#将回调传递给按钮相关的知识,希望对你有一定的参考价值。
在Java或Flash中,我习惯于将回调传递给我的按钮对象,如下所示:
主要类别
function init() {
var myButton = new Button("red", doSomething);
}
function doSomething() {
log("someone clicked our button, but who?");
}
按钮类构造器
function Button(color, callback) {
addListener(mouseClick, callback);
}
此示例已大大简化,关键是您可以将函数名称作为参数传递给Button实例。单击该按钮后,它将调用该函数。
在C#中可能吗?我已经阅读了一些有关委托的内容,但无法找出一个简单的示例。
答案
非常简单:
//Declare the function "interface"
delegate string UppercaseDelegate(string input);
//Declare the function to be passed
static string UppercaseAll(string input)
{
return input.ToUpper();
}
//Declare the methode the accepts the delegate
static void WriteOutput(string input, UppercaseDelegate del)
{
Console.WriteLine("Before: {0}", input);
Console.WriteLine("After: {0}", del(input));
}
static void Main()
{
WriteOutput("test sentence", new UppercaseDelegate(UppercaseAll));
}
另一答案
使用按钮之类的UI控件的通常方法是将事件附加到它们。 .NET中的事件处理程序具有2个参数(object sender
和EventArgs e
)的标准化(但不是强制性)格式。声明因您使用的UI框架而异。这是一个ASP.NET声明。
<asp:Button ID="btnDoSomething" runat="server" Text="Do Something" OnClick="btnDoSomething_Click" />
然后,文件后面的代码将具有相应的事件处理程序功能来执行代码。
protected void btnDoSomething_Click(object sender, EventArgs e)
{
// Do something
}
传递函数
在C#中也可以传递函数。
最简单的语法(至少我认为是这样)是使用Func<T>
或Func<T>
类型。 Action<T>
映射到函数,Action<T>
映射到不返回结果的命令。
因此,您的示例的模拟将是这样。
Func<T>
这些类型中的每一个都有许多重载,您还可以定义输入参数类型,对于Action<T>
,还可以定义输出返回类型。
另一答案
似乎没有一种使用WinForms中的Button类在构造函数中分配回调的方法。但第二步很容易做到:
public class Button
{
private readonly string color;
private readonly Action callback;
public Button(string color, Action callback)
{
this.color = color;
this.callback = callback;
}
public void Click()
{
// This executes the callback action
this.callback();
}
}
class Program
{
static void Main(string[] args)
{
var myButton = new Button("red", DoSomething);
myButton.Click(); // Prints "Something was done" to the console.
}
private void DoSomething()
{
Console.WriteLine("Something was done");
}
}
以上是关于[C#将回调传递给按钮的主要内容,如果未能解决你的问题,请参考以下文章
FLTK:按下哪个按钮 - 将数字传递给按钮的回调(lambda)
将带有参数的 c# 回调方法传递给 c++ dll 会导致 System.ExecutionEngineException