如何使用面板动态创建数据网格?

时间:2019-01-16 18:56:38

标签: c# winforms

我是法国人,为我的英语不好而感到抱歉...但我希望你能帮助我;)

我正在用C#开发一个软件,在DB中存储大量信息,例如有关人的信息。

我想通过漂亮的UI显示这些信息,

为此,我创建了:

  • Visual的第一个面板
  • 用于动态创建子面板的类

我进行一个循环,对于每个人,我使用每个人的信息调用方法“ createPanel”,并将这些创建的子面板添加到父面板中。每个人的ID存储在子面板的“ tag”参数中。

一切正常,但是我真的不知道如何在每个子面板中添加事件。 正如您在上面的链接中看到的那样,用户可以单击书签或显示菜单的图标(带有3点的圆形=图标“菜单”)。

我的问题是如何为每个子面板动态添加事件?例如,当我单击图标“菜单”时,我想为每个子面板显示一个菜单,将ID存储在子面板的“标签”中,并显示用于管理信息的新表单。

感谢您的帮助,如有必要,我可以添加代码:)

1 个答案:

答案 0 :(得分:0)

为要显示的面板制作自己的用户控件,其中包含所需工具箱中的所有控件。

public partial class MyControl : UserControl
{
  ...
}

在“ MyControl”中,为所有可能发生的事件定义事件,这些事件必须在控件的外部中进行处理。与例如组合框为“ SelectedIndexChanged”。

您的控件类将如下所示:

public partial class MyControl : UserControl
{
   public event EventHandler<MyImportantEventA> OnImportantThingHappend;

   //Event-Invoker
   protected virtual void OnOnImportantThingHappend(MyImportantEventA e)
        {
            OnImportantThingHappend?.Invoke(this, e);
        }
}

//Data of your event. Customize as you like/need.
public class MyImportantEventA : EventArgs   
 {
            public string Message { get; set; }
 }

动态添加控件时,请绑定到控件的事件:

myUserControl.OnImportantThingHappend += DoSomethingWithEvent;

控件可以自行处理的事情,不需要作为事件公开。 例如:

“关闭”可能是必须从外部处理的内容。您需要删除控件,重新排列控件等。

“显示详细信息”可能是可以在控件内部完全处理的东西。您的控件将显示一个消息框或精美的工具提示。