user3635160
user3635160

Reputation:

Getting access to Button parent

I'm using a Button in a class. When the button is pressed, it should call a routine with the button's corresponding text. How do I convert the sender into a String_Entry? Also, I'm quite a newbie regarding object oriented/class programming, so comments are welcome.

public class String_Entry
{
    public TextBox textbox;
    public Button send;
    // other stuff

    public String_Entry()
    {
        textbox = new TextBox();
        send = new Button();
        send.Click += new System.EventHandler(this.bSend_Click);
        // put in GUI, set parameters and other stuff
    }

    // other stuff

    private void bSend_Click(object sender, EventArgs e)
    {
        // Trying to get the corresponding String_Entry from the Button click event
        Button cntrl = (Button)sender;
        String_Entry entry = (String_Entry)(cntrl.Parent);

        parse.ProcessHexLine(entry);
    }
}

Upvotes: 1

Views: 2007

Answers (1)

David Arno
David Arno

Reputation: 43254

Your solution of encapsulating a button with a textbox and the event handler is sound. It just goes wrong in the event handler:

private void bSend_Click(object sender, EventArgs e)
{
    Button cntrl = (Button)sender;
    String_Entry entry = (String_Entry)(cntrl.Parent);

    parse.ProcessHexLine(entry);
}

Firstly, there is no point to doing anything with sender as it'll be the same as the field send. Next cntrl.Parent will give you a reference to the Form, or other container object, that contains the button, not this instance of String_Entry. To access that, use this. So you can change the event handler to:

private void bSend_Click(object sender, EventArgs e)
{
    parse.ProcessHexLine(this);
}

Upvotes: 3

Related Questions