通过xamarin中的其他按钮重新定义按钮功能

时间:2015-11-10 20:27:01

标签: c# android xamarin

我试图在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);

            };


};

1 个答案:

答案 0 :(得分:0)

问题是您永远不会从按钮Click事件中删除代理。请注意,当您添加委托时,您使用" + ="运营商。在此上下文中,该运算符将另一个委托附加到事件。活动也支持" - ="运算符以删除委托。但是,为了删除委托,您需要保留对它的引用。

通常,我在这里使用方法,因为它更容易注册和取消注册方法,而不是保持对匿名委托的引用。让我们看看两者都在行动......

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

使用捕获的匿名代表......

        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方法。