Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   ASP .Net (http://www.velocityreviews.com/forums/f29-asp-net.html)
-   -   How to refer to a dynamically created control in event handler? (http://www.velocityreviews.com/forums/t592792-how-to-refer-to-a-dynamically-created-control-in-event-handler.html)

gnewsgroup 02-19-2008 08:21 PM

How to refer to a dynamically created control in event handler?
 
Suppose I create a button on the fly and assign an event handler to it
in the code-behind like so:

protected Button CreateMyButton()
{
Button myButton = new Button();
myButton.Text = "Test";
myButton.Click += new EventHandler(myButton_Click);
return myButton;
}

Now, in myButton_Click event handler, how do I get a reference to the
newly created Button object called myButton?

In the Click event handler, we cannot directly say something like

myButton.Text = "Text has changed";

which I tried, and for which I got this:

System.NullReferenceException: Object reference not set to an instance
of an object.

I got the same exception even if I declared myButton as a class-level
private member.

So here is the question: How to refer to a dynamically created control
in the event handler?

Thank you.


bruce barker 02-19-2008 08:55 PM

RE: How to refer to a dynamically created control in event handler?
 
two options

1) make Button myButton a class variable instead of a local, which is how
the aspx page does it.

2) the first arg to the event handler is the object (button) that caused the
event. just cast it as a Button

-- bruce (sqlwork.com)


"gnewsgroup" wrote:

> Suppose I create a button on the fly and assign an event handler to it
> in the code-behind like so:
>
> protected Button CreateMyButton()
> {
> Button myButton = new Button();
> myButton.Text = "Test";
> myButton.Click += new EventHandler(myButton_Click);
> return myButton;
> }
>
> Now, in myButton_Click event handler, how do I get a reference to the
> newly created Button object called myButton?
>
> In the Click event handler, we cannot directly say something like
>
> myButton.Text = "Text has changed";
>
> which I tried, and for which I got this:
>
> System.NullReferenceException: Object reference not set to an instance
> of an object.
>
> I got the same exception even if I declared myButton as a class-level
> private member.
>
> So here is the question: How to refer to a dynamically created control
> in the event handler?
>
> Thank you.
>
>


Scott Roberts 02-19-2008 08:57 PM

Re: How to refer to a dynamically created control in event handler?
 

"gnewsgroup" <gnewsgroup@gmail.com> wrote in message
news:3391642e-cdfe-42b1-b68b-27ece881db5b@s13g2000prd.googlegroups.com...
> Suppose I create a button on the fly and assign an event handler to it
> in the code-behind like so:
>
> protected Button CreateMyButton()
> {
> Button myButton = new Button();
> myButton.Text = "Test";
> myButton.Click += new EventHandler(myButton_Click);
> return myButton;
> }
>
> Now, in myButton_Click event handler, how do I get a reference to the
> newly created Button object called myButton?
>
> In the Click event handler, we cannot directly say something like
>
> myButton.Text = "Text has changed";
>
> which I tried, and for which I got this:
>
> System.NullReferenceException: Object reference not set to an instance
> of an object.
>
> I got the same exception even if I declared myButton as a class-level
> private member.
>
> So here is the question: How to refer to a dynamically created control
> in the event handler?


The "sender" parameter is the control that generated the event. You'll need
to cast it to a Button.


gnewsgroup 02-19-2008 09:26 PM

Re: How to refer to a dynamically created control in event handler?
 
On Feb 19, 3:57*pm, "Scott Roberts" <srobe...@no.spam.here-webworks-
software.com> wrote:
> "gnewsgroup" <gnewsgr...@gmail.com> wrote in message
>
> news:3391642e-cdfe-42b1-b68b-27ece881db5b@s13g2000prd.googlegroups.com...
>
>
>
>
>
> > Suppose I create a button on the fly and assign an event handler to it
> > in the code-behind like so:

>
> > protected Button CreateMyButton()
> > {
> > *Button myButton = new Button();
> > *myButton.Text = "Test";
> > *myButton.Click += new EventHandler(myButton_Click);
> > *return myButton;
> > }

>
> > Now, in myButton_Click event handler, how do I get a reference to the
> > newly created Button object called myButton?

>
> > In the Click event handler, we cannot directly say something like

>
> > myButton.Text = "Text has changed";

>
> > which I tried, and for which I got this:

>
> > System.NullReferenceException: Object reference not set to an instance
> > of an object.

>
> > I got the same exception even if I declared myButton as a class-level
> > private member.

>
> > So here is the question: How to refer to a dynamically created control
> > in the event handler?

>
> The "sender" parameter is the control that generated the event. You'll need
> to cast it to a Button.- Hide quoted text -
>
> - Show quoted text -


Thank both of you. I was tring to see what methods intellisense would
show me while I typed up sender dot. But none of those seemed to be
helpful.

Now that I realize that I can cast the sender object to the type of
the object which raised the event, I also realize that I might have
simplified my question.

I am actually using Dundas to create some charts on the fly. For
example, I create Chart1 on the fly and put it in a placeholder. In
the Dundas GanttChart example, there is a Chart1_PostPaint event
handler which draws stuff on the chart *after* the chart has been
rendered (my understanding). The example code goes like this:

private void Chart1_PostPaint(object sender,
Dundas.Charting.WebControl.ChartPaintEventArgs e)
{
if(sender is ChartArea)
{
Series series = Chart1.Series["Tasks"];
// [snip]
}
}

Note that in their example, this Chart1 is declared in the aspx file.
The problem for me is that whereas the *sender* is ChartArea, they are
referring to Chart1, which is not a ChartArea, but some kind of parent
of ChartArea. I can't seem to get a reference to the parent from the
*sender* ChartArea. That's why I got stuck.

Mark: I did try declaring Chart1 as a class-level private member, but
it did not help.

gnewsgroup 02-19-2008 09:38 PM

Re: How to refer to a dynamically created control in event handler?
 
On Feb 19, 4:26*pm, gnewsgroup <gnewsgr...@gmail.com> wrote:
> On Feb 19, 3:57*pm, "Scott Roberts" <srobe...@no.spam.here-webworks-
>
>
>
>
>
> software.com> wrote:
> > "gnewsgroup" <gnewsgr...@gmail.com> wrote in message

>
> >news:3391642e-cdfe-42b1-b68b-27ece881db5b@s13g2000prd.googlegroups.com...

>
> > > Suppose I create a button on the fly and assign an event handler to it
> > > in the code-behind like so:

>
> > > protected Button CreateMyButton()
> > > {
> > > *Button myButton = new Button();
> > > *myButton.Text = "Test";
> > > *myButton.Click += new EventHandler(myButton_Click);
> > > *return myButton;
> > > }

>
> > > Now, in myButton_Click event handler, how do I get a reference to the
> > > newly created Button object called myButton?

>
> > > In the Click event handler, we cannot directly say something like

>
> > > myButton.Text = "Text has changed";

>
> > > which I tried, and for which I got this:

>
> > > System.NullReferenceException: Object reference not set to an instance
> > > of an object.

>
> > > I got the same exception even if I declared myButton as a class-level
> > > private member.

>
> > > So here is the question: How to refer to a dynamically created control
> > > in the event handler?

>
> > The "sender" parameter is the control that generated the event. You'll need
> > to cast it to a Button.- Hide quoted text -

>
> > - Show quoted text -

>
> Thank both of you. *I was tring to see what methods intellisense would
> show me while I typed up sender dot. *But none of those seemed to be
> helpful.
>
> Now that I realize that I can cast the sender object to the type of
> the object which raised the event, I also realize that I might have
> simplified my question.
>
> I am actually using Dundas to create some charts on the fly. *For
> example, I create Chart1 on the fly and put it in a placeholder. *In
> the Dundas GanttChart example, there is a Chart1_PostPaint event
> handler which draws stuff on the chart *after* the chart has been
> rendered (my understanding). *The example code goes like this:
>
> private void Chart1_PostPaint(object sender,
> Dundas.Charting.WebControl.ChartPaintEventArgs e)
> {
> if(sender is ChartArea)
> * {
> * * *Series series = Chart1.Series["Tasks"];
> * * *// [snip]
> * }
>
> }
>
> Note that in their example, this Chart1 is declared in the aspx file.
> The problem for me is that whereas the *sender* is ChartArea, they are
> referring to Chart1, which is not a ChartArea, but some kind of parent
> of ChartArea. *I can't seem to get a reference to the parent from the
> *sender* ChartArea. *That's why I got stuck.
>
> Mark: I did try declaring Chart1 as a class-level private member, but
> it did not help.- Hide quoted text -
>
> - Show quoted text -


I had a method that returns the newly-created chart, now I declare
Chart1 as private member, and the method is changed to return void and
keeps updating chart1 contents and then in the PostPaoint event, I
refer to it as this.Chart1. It works! I didn't think it through.
Thanks for Mark!


All times are GMT. The time now is 10:56 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.