简体   繁体   中英

How can I pass a parameter to control event handler?

I am creating a winforms app which generates a number of panels at runtime. I want each panel, when clicked, to open a web link.

The panels are generated at runtime:

for (int i = 0; i < meetings.Count(); i++) {        
 Panel door = new Panel();
 door.Location = new System.Drawing.Point((i * 146) + (i * 10) + 10, 10);
 door.Size = new System.Drawing.Size(146, 300);
 door.BackgroundImage = ConferenceToolkit.Properties.Resources.Door;
 door.Click += new EventHandler(door_Click);
 Controls.Add(door);
}

and I want the event handler to point to a URL that is stored somehow in the Panel attributes. (On a web form I could use Attributes["myAttribute"] but this doesn't seem to work with WinForms):

 private void door_Click(object sender, EventArgs e)
    {
        Panel p = sender as Panel;
        Process.Start(p.Attributes["url"]);
    }

There are many options for this, you may store URL in the (unused in Panel ) Text property:

door.Text = FindUrl(meetings[i]);

Used like:

Process.Start(p.Text);

As alternative you may use general purpose Tag property:

door.Tag = FindUrl(meetings[i]);

With:

Process.Start(p.Tag.ToString());

Tag property is usually right place for these things and, becauase it's of type object , you can even use it to store complex types (in case you need more than a simple string).

See also similar posts for slightly more complex cases: this , this and this .

You can store the URL that you want in the Panel's Tag propertie

for example

p.Tag = "www.google.com";

and then you can use it when use cast the Panel in the on click method

reference for the .Tag property

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.tag(v=vs.110).aspx

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM