【问题标题】:How can I pass a parameter to control event handler?如何将参数传递给控制事件处理程序?
【发布时间】:2014-10-16 16:06:05
【问题描述】:

我正在创建一个在运行时生成多个面板的 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。 (在网络表单上,我可以使用 Attributes["myAttribute"] 但这似乎不适用于 WinForms):

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

【问题讨论】:

    标签: c# winforms controls


    【解决方案1】:

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

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

    像这样使用:

    Process.Start(p.Text);
    

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

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

    与:

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

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

    对于稍微复杂的案例,另请参阅类似帖子:thisthisthis

    【讨论】:

      【解决方案2】:

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

      例如

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

      然后您可以在单击方法中使用投射面板时使用它

      .Tag 属性的参考

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

      【讨论】:

        猜你喜欢
        • 2011-05-02
        • 1970-01-01
        • 2012-08-30
        • 2018-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多