【问题标题】:How can I pass informations between the form and the user controls?如何在表单和用户控件之间传递信息?
【发布时间】:2019-11-25 11:26:39
【问题描述】:

我的项目有问题。因为我不喜欢每个 Windows 窗体都是一个新窗口,所以我确实尝试使用不同的方式。

这样我确实创建了一个包含菜单并调用不同 UserControls 的 FormGUI。因为我们只学习了如何使用 Windows 窗体,所以我知道如何使用它们。在那里,我将更改新 Windows 窗体的构造函数以传递数据。

但这次我主要使用一个 Windows 窗体和不同的用户控件。

例如我有一个用于添加新数据,另一个用于在数据网格中显示数据,另一个用于在图表中显示数据。至少这是结果。

但我没有找到一种方法将信息从 Windows 窗体传输到一个用户控件以及如何取回它们。为了在其他地方使用这个knowlegde。

有人知道我可以看到它如何工作的教程吗?或者可以给我解释一下。

由于 UI 是将被标记的最终项目的一部分,因此我更喜欢我的新方式。但是,如果我找不到解决方法,我将需要对其进行更改,以便我可以使用不同的 Windows 窗体。 >_> 但实际上...我不希望应用程序为每个任务打开新窗口。我宁愿只在一页中显示信息。

在我的搜索中,我确实找到了一些关于使用 Windows 窗体进行 UI 设计的教程,但只有设计(放置图表的位置只是一张图片)而不是如何处理真实信息。

希望你能理解我的问题...

【问题讨论】:

    标签: c# visual-studio winforms user-controls windows-forms-designer


    【解决方案1】:

    假设表单的构造函数是这样的

    private List<MyData> _data;
    
    public MyForm(List<MyData> data)
    (
        ...
        _data = data;
    )
    

    声明一个接口

    public IDataAware
    {
        List<MyData> Data { get; set; }
    }
    

    并让用户控件实现它。例如

    public MyDataGridUserControl : UserControl
    {
        ...
    
        public List<MyData> Data {
            get { return (List<MyData>)dataGridView1.DataSource; }
            set { dataGridView1.DataSource = value }
        }
    }
    

    如果您使用的是BindingSource,请访问BindingSource 而不是网格控件。现在,您可以通过同一界面访问所有用户控件。在表单中你可以创建一个字段

    private IDataAware _dataUserControl;
    

    在菜单项单击例程中,您可以执行类似的操作

    _dataUserControl = new MyDataGridUserControl();
    

    在另一个

    _dataUserControl = new MyChartUserControl();
    

    但是所有实现IDataAware的用户控件你都可以做

    Controls.Add(_dataUserControl);
    _dataUserControl.Data = _data;  
    

    注意:Forms、Controls 和 UserControls 与任何其他类一样只是类,您可以像使用任何 c# 类一样使用它们做所有面向对象的事情。 (不过,泛型有一些限制。)

    【讨论】:

    • 起初我以为我会理解它......但我现在读了二十多遍......不知何故我被卡住了。好的,我现在有一个名为 IDatenBestand 的接口,我确实在用户控件中实现了它。但老实说,我不明白我必须从那里去。我的意思是......在表单中我有原始的 lsit 和在用户控件中我想添加到这个列表或使用它的信息。但是我怎么知道表单或控件是否有完整的信息?我不知道是不是时候——我从早上 8 点开始就坐在这里。或者别的什么。
    • 请将相关代码添加到您的问题中。到目前为止,我不得不猜测你在做什么,很难告诉你更多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    相关资源
    最近更新 更多