user2660030
user2660030

Reputation:

How to call a function in onclick event in xamarin.studio

I am C# developer working on a simple calculator in xamarin.studio for android my code is

        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;
        };

i am getting error in buttonclick(); and operationbuttonclick(); line 2 and 4 of above code. my buttonclickmethod and operationbuttonclick methods are

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);
    }

and

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 ();
    }

In visual studio it can easily be done by going event handler of button and set the method in onclick event how to do it in xamarin. I've googled for this and can't find any appropriate solution. any help will be appreciated.

Upvotes: 8

Views: 30995

Answers (2)

Stephane Delcroix
Stephane Delcroix

Reputation: 16230

You might enjoy typing a lot, but here's the short version. Nothing new, it works since .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;
};

Upvotes: 6

Vikas Rana
Vikas Rana

Reputation: 1999

You can use event handler in place of delegates , try this

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;
        };

and remaining code same.

Upvotes: 7

Related Questions