如何将参数传递给控制事件处理程序

本文关键字:控制 事件处理 程序 参数传递 | 更新日期: 2023-09-27 18:26:43

我正在创建一个winforms应用程序,它在运行时生成许多面板。我希望每个面板在单击时都能打开一个网络链接。

面板在运行时生成:

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);
}

我希望事件处理程序指向一个以某种方式存储在Panel属性中的URL。(在web表单上,我可以使用Attributes["myAttribute"],但这似乎不适用于WinForms):

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

如何将参数传递给控制事件处理程序

有很多选项,您可以将URL存储在(Panel中未使用的)Text属性中:

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

使用方式:

Process.Start(p.Text);

作为替代方案,您可以使用通用Tag属性:

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

带有:

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

标记属性通常是这些东西的正确位置,因为它的类型是object,所以您甚至可以使用它来存储复杂的类型(如果您需要的不仅仅是一个简单的字符串)。

另请参阅类似的帖子,了解稍微复杂一些的情况:this、this和this。

您可以将想要的URL存储在面板的标签属性中

例如

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

然后你可以在点击方法中使用铸造面板时使用它

Tag属性的参考

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