【问题标题】:redefine buttons functionality by other buttons in xamarin通过 xamarin 中的其他按钮重新定义按钮功能
【发布时间】:2015-11-11 05:46:45
【问题描述】:

我试图在 xamarin 中实现构造,这将允许我通过它们上方的两个主要按钮重新定义一堆按钮。问题是在我单击第二个主按钮后,子按钮功能的两个部分都变为活动状态。因此,当我点击 button1 然后点击 currency1button 或 currency2button 时,代码按预期工作,但在我点击 button2 并尝试点击 currency1button 之后,textView.Text=(""+currencyTable[startingCurrency].name)textView1.Text=(""+currencyTable[endCurrency].name) 都将执行。感谢您提供的任何帮助,并为我的英语不好感到抱歉。

    button1.Click += delegate { 


            currency1button.Click += delegate {
                startingCurrency=1;
                textView.Text=(""+currencyTable[startingCurrency].name);


            };


            currency2button.Click += delegate {
                startingCurrency=2;
                textView.Text=(""+currencyTable[startingCurrency].name);

            };

};


button2.Click += delegate {



            currency1button.Click += delegate {
                endCurrency=1;
                textView1.Text=(""+currencyTable[endCurrency].name);

            };


            currency2button.Click += delegate {
                endCurrency=2;
                textView1.Text=(""+currencyTable[endCurrency].name);

            };


};

【问题讨论】:

    标签: c# android xamarin


    【解决方案1】:

    问题是您永远不会从按钮 Click 事件中删除委托。请注意,当您添加委托时,您如何使用“+=”运算符。在这种情况下,该操作员将另一个委托附加到该事件。事件还支持“-=”运算符来删除委托。但是,要删除委托,您需要保留对它的引用。

    通常,我在这里使用方法,因为注册和注销方法比保持对匿名委托的引用更容易。让我们看看两者的实际效果......

    我将稍微简化一下我的代码,并假设只有 1 个货币按钮。

    使用捕获的匿名委托...

            Action currency1buttonCase1Delegate = delegate {
                // your handler code in here
            };
    
            Action currency1buttonCase2Delegate = delegate {
                // your handler code in here
            };
    
            button1.Click += delegate {
                // Remove click handlers
                currency1button.Click -= currency1buttonCase1Delegate;
                currency1button.Click -= currency1buttonCase2Delegate;
                // Add the delegate that you want for this event
                currency1button.Click += currency1buttonCase1Delegate;
            }
    
            button2.Click += delegate {
                currency1button.Click -= currency1buttonCase1Delegate;
                currency1button.Click -= currency1buttonCase2Delegate;
    
                currency1button.Click += currency1buttonCase2Delegate;
            }
    

    将方法用作事件处理程序...

           button1.Click += delegate {
                // Clear all handles
                current1button.Click -= Currency1ButtonCase1;
                current1button.Click -= Currency1ButtonCase2;
    
                // Add the one we want
                currency1button.Click += Currency1ButtonCase1;
            };
    
            button2.Click += delegate {
                // Clear all handles
                current1button.Click -= Currency1ButtonCase1;
                current1button.Click -= Currency1ButtonCase2;
    
                // Add the one we want
                currency1button.Click += Currency1ButtonCase2;
            };
    

    在类中的某个时刻,您必须使用匿名委托中的代码定义方法 Currency1ButtonCase1 和 Currency1ButtonCase2。

    【讨论】:

      猜你喜欢
      • 2013-04-06
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      • 2019-02-07
      • 1970-01-01
      相关资源
      最近更新 更多