You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何通过字符串为动态生成的Button绑定对应Click事件处理函数

解决方案

方案1:使用System.Reflection实现按方法名字符串绑定事件

你需要通过反射获取对应名称的方法实例,再转成对应事件的委托绑定即可,修改你的循环代码如下:

using System.Reflection; // 首先引入命名空间

for (int n=0;n<10;n++)
{
    Button btn = new Button();
    btn.Name = "AAA_"+n.ToString();
    btn.HorizontalAlignment = HorizontalAlignment.Stretch;
    btn.VerticalAlignment = VerticalAlignment.Stretch;
    btn.Content = "BBB_"+n.ToString();
    btn.BorderBrush = new SolidColorBrush(Windows.UI.Colors.Black);
    btn.BorderThickness = new Thickness(1);
    btn.Foreground = new SolidColorBrush(Windows.UI.Colors.Black);
    btn.Visibility = Visibility.Visible;
    
    // 反射绑定事件逻辑
    string Btn_ClickTemp = "Btn_Click"+n.ToString();
    // 获取当前类的私有实例方法
    MethodInfo methodInfo = this.GetType().GetMethod(Btn_ClickTemp, BindingFlags.Instance | BindingFlags.NonPublic);
    if (methodInfo != null)
    {
        // 将方法转为RoutedEventHandler委托
        RoutedEventHandler handler = (RoutedEventHandler)Delegate.CreateDelegate(typeof(RoutedEventHandler), this, methodInfo);
        btn.Click += handler;
    }
}

注意点:

  • 必须指定BindingFlags.Instance | BindingFlags.NonPublic参数,才能匹配到你声明的private实例方法
  • 要保证拼接出来的方法名和你实际定义的处理函数名完全一致,否则会找不到方法

方案2:更推荐的统一事件处理方案(无需反射)

如果不需要严格要求每个按钮对应独立的处理函数,更建议使用同一个事件处理函数,通过按钮的Name或Tag区分触发源,性能更优且维护成本更低:

循环绑定代码:

for (int n=0;n<10;n++)
{
    Button btn = new Button();
    btn.Name = "AAA_"+n.ToString();
    // 其余属性赋值逻辑不变
    btn.Click += Btn_CommonClick; // 所有按钮绑定同一个处理函数
}

统一处理函数:

private void Btn_CommonClick(object sender, RoutedEventArgs e)
{
    Button btn = sender as Button;
    if (btn == null) return;
    // 根据按钮名称区分处理逻辑
    switch (btn.Name)
    {
        case "AAA_0":
            // 原Btn_Click0的逻辑写在这里
            break;
        case "AAA_1":
            // 原Btn_Click1的逻辑写在这里
            break;
        // 其余case按需添加
        default:
            break;
    }
}

内容的提问来源于stack exchange,提问作者Yichao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:15:03