Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > How to refer to a dynamically created control in event handler?

Reply
Thread Tools

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

 
 
gnewsgroup
Guest
Posts: n/a
 
      02-19-2008
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.

 
Reply With Quote
 
 
 
 
bruce barker
Guest
Posts: n/a
 
      02-19-2008
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.
>
>

 
Reply With Quote
 
 
 
 
Scott Roberts
Guest
Posts: n/a
 
      02-19-2008

"gnewsgroup" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> 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.

 
Reply With Quote
 
gnewsgroup
Guest
Posts: n/a
 
      02-19-2008
On Feb 19, 3:57*pm, "Scott Roberts" <(E-Mail Removed)-webworks-
software.com> wrote:
> "gnewsgroup" <(E-Mail Removed)> wrote in message
>
> news:(E-Mail Removed)...
>
>
>
>
>
> > 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.
 
Reply With Quote
 
gnewsgroup
Guest
Posts: n/a
 
      02-19-2008
On Feb 19, 4:26*pm, gnewsgroup <(E-Mail Removed)> wrote:
> On Feb 19, 3:57*pm, "Scott Roberts" <(E-Mail Removed)-webworks-
>
>
>
>
>
> software.com> wrote:
> > "gnewsgroup" <(E-Mail Removed)> wrote in message

>
> >news:(E-Mail Removed)...

>
> > > 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!
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
Affecting a dynamically created drop down from another dynamically created drop down. msimmons ASP .Net 0 07-16-2009 03:17 PM
Managing ViewState of a dynamically created Custom Composite Server Control -(where the original is also dynamically created) dickster ASP .Net Building Controls 0 12-08-2005 09:32 AM
How to refer to dynamically created objects? Beffmans ASP .Net 3 07-19-2005 01:39 AM
Passing event from dynamically created element and event handler? Adi Javascript 2 02-23-2004 02:44 PM



Advertisments