如何在xamarin.studio中的onclick事件中调用函数

时间:2013-11-29 07:06:55

标签: c# android xamarin-studio

我是C#开发人员,在xamarin.studio中使用简单的计算器,我的代码是

        btn9.Click += delegate {
            Buttonclick();
        };
        btnadd.Click += delegate {
            operationbuttonclick ();
        };
        btnsub.Click += delegate {
            operationbuttonclick ();
        };
        btndiv.Click += delegate {
            operationbuttonclick ();
        };
        btnmul.Click += delegate {
            operationbuttonclick ();
        };
        btneql.Click += delegate {
            txt1.Text=result.ToString();
            isfirst=true;
            hasdecimal=true;
            shouldclear=true;
        };
        btnCE.Click += delegate {
            txt1.Text="0";
            result=0;
            isfirst=true;
            shouldclear=true;
            hasdecimal=false;
        };

我在buttonclick()中收到错误;和operationbuttonclick();上面代码的第2行和第4行。 我的buttonclick方法和operationbuttonclick方法是

private void Buttonclick(object sender,EventArgs e)
    {
        EditText txt2 = FindViewById<EditText> (Resource.Id.textView1);
        EditText txt1 = FindViewById<EditText> (Resource.Id.textView2);
        Button sbutton = (sender as Button);
        double oldno, newno,buttonno;
        if(shouldclear)
        {
            txt1.Text="";
            oldno=0;
            shouldclear=false;
        }
        else 
        {
            oldno=double.Parse(txt1.Text);
            hasdecimal = true;
        }
        buttonno=double.Parse(sbutton.Text);
        newno = (oldno * 10) + buttonno;
        if(isfirst)
        {
            num1=newno;
        }
        else
        {
            num2=newno;
        }
        txt1.Text += sbutton.Text;
        Calculate (symbol);
    }

private void operationbuttonclick(object sender,EventArgs e)
    {
        EditText txt2 = FindViewById<EditText> (Resource.Id.textView1);
        EditText txt1 = FindViewById<EditText> (Resource.Id.textView2);
        num1 = result;
        Button sourcebutton=(sender as Button);
        string operatorsymbol = sourcebutton.Text;
        if (isfirst)
            isfirst = false;
        hasdecimal = true;
        symbol = operatorsymbol;
        txt1.Text = result.ToString ();
    }

在visual studio中,可以通过按钮的事件处理程序轻松完成,并在onclick事件中设置方法如何在xamarin中执行。我已经google了这个,找不到任何合适的解决方案。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:7)

您可以使用事件处理程序代替委托,试试这个

btn9.Click += (object sender, EventArgs e) => {
            Buttonclick (sender, e);
        };
        btnadd.Click += (object sender, EventArgs e) => {
            operationbuttonclick (sender, e);
        };
        btnmul.Click += (object sender, EventArgs e) => {
            operationbuttonclick (sender, e);
        };
        btnsub.Click += (object sender, EventArgs e) => {
            operationbuttonclick (sender, e);
        };
        btndiv.Click += (object sender, EventArgs e) => {
            operationbuttonclick (sender, e);
        };
        btneql.Click += delegate {
            txt1.Text=result.ToString();
            isfirst=true;
            hasdecimal=true;
            shouldclear=true;
        };
        btnCE.Click += delegate {
            txt1.Text="0";
            result=0;
            isfirst=true;
            shouldclear=true;
            hasdecimal=false;
        };

,其余代码相同。

答案 1 :(得分:6)

你可能喜欢打字很多,但这里是短版。没有什么新东西,它可以用于.NET2.0 iirc

btn9.Click += Buttonclick;
btnadd.Click += operationbuttonclick;
btnsub.Click += operationbuttonclick;
btndiv.Click += operationbuttonclick;
btnmul.Click += operationbuttonclick;
btneql.Click += (o,e) => {
    txt1.Text=result.ToString();
    isfirst=true;
    hasdecimal=true;
    shouldclear=true;
};
btnCE.Click += (o,e) => {
    txt1.Text="0";
    result=0;
    isfirst=true;
    shouldclear=true;
    hasdecimal=false;
};