2014-10-16 116 views
0

我正在创建一个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); 
} 

,我想事件处理程序指向在属性面板以某种方式存储的URL。 (在网页形式我可以使用属性[“myAttribute”],但是这似乎并没有与WinForms的工作):

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

回答

2

有很多选择,对于这一点,你可以在(未使用的存储URL在PanelText属性:

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

使用,如:

Process.Start(p.Text); 

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

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

有了:

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

标签属性通常为正确的地方这些东西,并becauase它object型的,你甚至可以用它来存储复杂类型(如果你需要的不仅仅是一个简单的字符串)。

另请参见稍微复杂的情况类似的帖子:this,thisthis

相关问题