【问题标题】:how create a datagrid with panel dynamically?如何动态创建带有面板的数据网格?
【发布时间】:2019-01-16 18:56:37
【问题描述】:

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

我正在用 c# 开发一个软件,其中有很多信息存储在数据库中,比如关于人的信息。

我想用漂亮的 UI 显示这些信息,就像这样:

为此,我创建了:

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

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

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

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

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

【问题讨论】:

标签: c# winforms


【解决方案1】:

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

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;

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

“关闭”可能是必须在外部处理的东西。您需要删除控件、重新排列控件等。

“显示详细信息”可能完全可以在您的控制范围内处理。您的控件会显示一个消息框或一个精美的工具提示。

【讨论】:

  • 这不能回答问题。它甚至不是如何创建用户控件的起点。 为什么首先使用用户控件?这不会使对接、堆叠更容易。
  • 问题不在于堆叠。这是关于如何获得所有需要的事件。 “我的问题是如何为每个子面板动态添加事件?例如,当我单击“菜单”图标时,我想为每个子面板显示一个菜单”
  • 问题不在于事件。它是关于创建一个带有面板、菜单和命令的 UI。您不能使用 UserControl 和事件来执行此操作。您直接在调用它们的控件中处理命令。否则,您必须在实现相同命令的菜单项、按钮、表单中复制代码。您可以创建单独的类并将 UI 事件路由到它们,而不会在 UI 和命令之间添加硬依赖关系。 Winforms 需要额外的工作才能做到这一点,而 WPF 已经有了命令路由的概念
  • 你好,我暂时没有测试你的代码,但是今天早上我已经成功使用了每个子面板上的事件。我只是将 ID 存储在图片框的“标签”参数中(例如菜单或收藏夹),当我点击图片框时,我会获取 ID,并显示一个新表单,其中包含与 ID 对应的信息 :) 这个工作正常:)
  • @PanagiotisKanavos 不知道你在说什么。问题完全是关于事件(引用上面的评论),并且在控件中拥有事件并处理它们在 Winforms 中是完美的。或者您的 Winforms 组合框是否公开命令?对于这样一个简单的问题,您的建议是矫枉过正。
猜你喜欢
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2010-11-24
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多