C# 如何在代码中创建多个面板并访问它们以进行事件等?

C# 如何在代码中创建多个面板并访问它们以进行事件等?,c#,winforms,panel,C#,Winforms,Panel,对于我正在做的一个项目,我试图通过两个For循环在WinForm上创建16个面板。然后,一旦这些面板被放置在表单加载中,我将尝试为每个面板创建一个MouseClick事件。唯一的问题是访问它们。面板已正确放置在winform上,但我无法访问它们。我试着把它们放在一个列表中,但每次我把它们加在一起,列表都是空的。这是我的代码: 有人对解决方案有什么建议吗?首先,列表总是空的,因为它被声明为静态的,我想如果您只是将其设置为私有成员,那么列表将按预期工作(因为您将尝试在静态上下文之外访问它)。在任何

对于我正在做的一个项目,我试图通过两个For循环在WinForm上创建16个面板。然后,一旦这些面板被放置在表单加载中,我将尝试为每个面板创建一个MouseClick事件。唯一的问题是访问它们。面板已正确放置在winform上,但我无法访问它们。我试着把它们放在一个列表中,但每次我把它们加在一起,列表都是空的。这是我的代码:


有人对解决方案有什么建议吗?

首先,列表总是空的,因为它被声明为静态的,我想如果您只是将其设置为私有成员,那么列表将按预期工作(因为您将尝试在静态上下文之外访问它)。在任何情况下,我都会这样做:

  Dictionary<string, Panel> formsPanels; // Initialize in form's constructors
  public void MouseClick(object sender, EventArgs e)
  {
      var panel = sender as Panel;
      if(panel == null) // check if the sender is a panel
         return;
      // Your Code
  }
首先,我会创建一个这样的字典:

  Dictionary<string, Panel> formsPanels; // Initialize in form's constructors
  public void MouseClick(object sender, EventArgs e)
  {
      var panel = sender as Panel;
      if(panel == null) // check if the sender is a panel
         return;
      // Your Code
  }

我没有在我的代码中验证任何问题,因此我为发生的任何错误道歉。无论如何,希望这能有所帮助。

@GrantWinney IMO,截图更容易处理,但下次我会考虑到这一点。您是否尝试使用TableLayoutPanel及其设施?在我看来,它是为了管理这种情况而发明的。点击面板是否会与发送者持有相同的引用?是的,你是对的,这是我的一个多余的陈述,谢谢你意识到这一点。