我的项目有问题。由于我不喜欢每个Windows窗体都是一个新窗口,因此我尝试使用其他方式。
这样,我确实创建了一个包含菜单并调用不同UserControl的FormGUI。由于我们只学习了如何使用Windows窗体,所以我知道如何使用它们。在那里,我将更改新Windows窗体的构造函数以传递数据。
但是这次我主要使用一个Windows窗体和不同的UserControls。
例如我有一个要添加新数据,另一个要在数据网格中显示数据,另一个要在图表内部显示数据。至少这是结果。
但是我没有找到一种方法将信息从Windows窗体传输到一个用户控件中以及如何将它们找回。为了在其他地方使用此Knowlegde。
有人知道一个教程,可以在其中看到它如何工作吗?或可以向我解释。
由于UI是最终项目的一部分,因此将被标记为我喜欢的新方式。但是,如果找不到解决方法,则需要对其进行更改,以便使用其他Windows窗体。 > _>但实际上...我不希望该应用程序为每个任务打开新窗口。我希望只在一页上显示信息。
在搜索中,我确实找到了一些有关使用Windows Form进行UI设计的教程,但只有设计(在其中放置图表只是一张图片),而不是如何与实际信息一起使用。
希望您能理解我的问题...
答案 0 :(得分:0)
让我们假设表单的构造函数是这样的
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;
注意:窗体,控件和用户控件只是任何其他类的类,您可以像使用任何c#类一样使用它们来进行所有面向对象的操作。 (但是,泛型有一些限制。)