Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / ASP.NET / General / February 2008

Tip: Looking for answers? Try searching our database.

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

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
gnewsgroup - 19 Feb 2008 20:21 GMT
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 - 19 Feb 2008 20:55 GMT
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)

> Suppose I create a button on the fly and assign an event handler to it
> in the code-behind like so:
[quoted text clipped - 26 lines]
>
> Thank you.
Scott Roberts - 19 Feb 2008 20:57 GMT
> Suppose I create a button on the fly and assign an event handler to it
> in the code-behind like so:
[quoted text clipped - 24 lines]
> 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 - 19 Feb 2008 21:26 GMT
On Feb 19, 3:57 pm, "Scott Roberts" <srobe...@no.spam.here-webworks-
software.com> wrote:

> > Suppose I create a button on the fly and assign an event handler to it
> > in the code-behind like so:
[quoted text clipped - 29 lines]
>
> - 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 - 19 Feb 2008 21:38 GMT
> On Feb 19, 3:57 pm, "Scott Roberts" <srobe...@no.spam.here-webworks-
>
[quoted text clipped - 72 lines]
>
> - 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!

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.