C# 给Button的Click传入自定义参数

如何给Click事件传递自定义的参数

有一种方法是在Button的Tag属性设置为你要传入的参数,一般不建议这么做,当然也不失为一种简单粗暴的好办法

 

为什么写这个是因为: 一开始我就是用具名函数的形式绑定Click事件的

原因是慎用匿名函数

匿名函数会产生很多内存泄漏的问题,因为你不小心就会捕获了各种变量甚至是一些全局静态变量

 

但是如果想传入自定义参数的话,那么第二种方式是不可以的

其余的方式只能通过lamada表达式来实现了
 

 

代码如下:

 public partial class MainWindow : Window
    {
        
        public MainWindow()
        {
            InitializeComponent();

            
            Button button1 = new Button();
            this.Content = button1;


            string ParamStr = "自定义参数";
            //第一种方式:匿名函数 直接捕获局部变量
            button1.Click += (sender, e) =>
            {
                MessageBox.Show(ParamStr);
            };
            //第二种方式:不行,具名函数无法获得局部变量
            button1.Click += Button1_Click;

            //第三种方式:也是匿名函数,匿名中包含具名函数,然后通过传参来实现
            //(sender, e) => MyButton1_Click(ParamStr) 这个整体就是一个匿名函数
            //本质上也是捕获,捕获了this和ParamStr
            button1.Click += (sender, e) => MyButton1_Click(ParamStr);

            //第四种方式:跟第三种一样,也是匿名函数,匿名中包含具名函数,然后通过传参来实现
            //只不过多了一步,定义了一个delegate
            RoutedEventHandler handler =(sender,e)=>MyButton1_Click(ParamStr);
            button1.Click += handler;
        }

        private void Button1_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(ParamStr);//报错,当前上下文不存在ParamStr
        }

        private void MyButton1_Click(String param)
        {
            MessageBox.Show(param);
        }
    }

 

第二种方式是行不通的,其他三种方式本质上都是捕获了局部变量

将鼠标移动至=>上 会提示已捕获

如下:

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值