如何重用表单(并在需要时更改其上下文)以避免多个相同的表单?C#

如何重用表单(并在需要时更改其上下文)以避免多个相同的表单?C#,c#,forms,winforms,inheritance,user-controls,C#,Forms,Winforms,Inheritance,User Controls,我正在用C#(Visual Studio 2015)制作一个windows窗体应用程序,很多窗体在控件方面应该是相似或相同的。我没有单独制作所有这些类似的表单(因为我最终会得到很多表单,这最终会减慢应用程序的速度),而是制作了一个基本表单,并从中继承了其他表单。然而,我最终还是得到了很多表单,它们只是继承的表单(我想代码更少) 我知道用户控制,但我不认为这是我想要的。这使得工作更容易,从某种意义上说,我不需要从底部制作所有这些表单,我只需要添加这些,一切都会好起来的。问题是我仍然必须将用户控件添

我正在用C#(Visual Studio 2015)制作一个windows窗体应用程序,很多窗体在控件方面应该是相似或相同的。我没有单独制作所有这些类似的表单(因为我最终会得到很多表单,这最终会减慢应用程序的速度),而是制作了一个基本表单,并从中继承了其他表单。然而,我最终还是得到了很多表单,它们只是继承的表单(我想代码更少)

我知道用户控制,但我不认为这是我想要的。这使得工作更容易,从某种意义上说,我不需要从底部制作所有这些表单,我只需要添加这些,一切都会好起来的。问题是我仍然必须将用户控件添加到某个东西中—添加到表单中?我希望能够在一节课内完成所有这些


示例:以下是我想要实现的一个示例,也许它会澄清问题:假设我想制作一张欧洲交互式地图-我希望人们能够点击一个国家并获取有关它的信息(以一个新窗口的形式-winform)。现在每个国家都有完全相同的窗口(表单)——它们都有一个文本框、两个按钮、一个图片框和一个标签,唯一不同的是这些控件中的信息。现在,与其制作50个看起来完全相同(但信息不同)的窗口窗体,还有更实用的方法吗?我知道我可以创建一个UserControl并将其添加到表单中,但我仍然必须创建所有这50个表单并添加UserControl。我担心在一个简单的应用程序中使用如此多的表单会减慢速度,而这似乎不是一种有效的方法。我想制作一个基本表单,包含所有这些内容,然后使用一个类允许编辑信息-当人们点击某个按钮(国家)时,基本表单被调用,但使用另一个类的信息连接到该特定按钮,例如,如果一个人点击意大利,他们将获得基本表单,但其中包含有关意大利的信息(文本框将包含意大利历史,还有意大利的图片……),但如果有人单击德国,他们也将获得基本表单,但这次它包含有关德国的信息。

为什么每个国家都需要一个新的表单类?类的概念是,它拥有共同的行为。表单就是一个类。只需使用需要显示的数据实例化类的实例。创建一个数据类来封装表单显示的数据(如地图图像、描述、历史记录等),并在显示之前将该类传递给表单。 例如:

在表单中添加如下方法:

public void SetCountry(Country country)
{
    //assumung you have controls on your form for displaying the data:
    Text = country.Name;
    txtDescription.Text = country.Description;
    txtHistory.Text = country.History;
    //etc.
}

我试图删除一些我认为对这个问题没有帮助的文本,但仍然有很多文本。你能试着把你的帖子压缩成2-3小块吗?我已经编辑了这个问题,把它缩小了,希望这样更好。把country作为参数传递给一个表单(构造函数参数、属性、方法),它会影响表单的显示。“有不同的信息”是什么意思还不清楚,一个简单的
开关/案例
可能会起作用。“意大利历史,这里有意大利的图片”-当你的单张表格开始在意大利使用时。怎样视情况而定。一个数据库,每个国家保存历史和图片。。字典。。一组用户控件,您可以根据确切的需求来决定。50个表单是一种方式,并不优雅,但它有它的优点,例如,当某个国家非常不同时。“现在每个国家都有完全相同的窗口(表单)——它们都有一个文本框、两个按钮、一个图片框和一个标签,唯一不同的是这些控件中的信息。”。在这种情况下,您只需要一个表单,只要在请求时将所涉国家的相关信息加载到表单中即可。例如,您可以将信息存储在数据库中。几乎所有的应用程序都是这样工作的。你这么认为吗?为每个问题创建一个全新的HTML页面?不,他们数百万次使用同一个模板,只是根据请求的ID加载不同的数据。顺便说一句,我知道我以前见过这个,谢谢,这似乎是我想要的。我还有一个问题,是否可以将控件从数据类添加到基窗体?例如,我需要其中一个表单看起来与基础表单完全相同,但有一个额外的按钮,是制作另一个表单更好,还是我可以用数据类添加一个按钮?将控件添加到基础表单,并根据您的needs@elizabathor还可以使用代码将控件动态添加到表单中,在运行时,您不必在设计时预先添加所有这些内容。非常感谢大家,您真的很有帮助。请原谅我缺乏知识,我正在慢慢学习。
public void SetCountry(Country country)
{
    //assumung you have controls on your form for displaying the data:
    Text = country.Name;
    txtDescription.Text = country.Description;
    txtHistory.Text = country.History;
    //etc.
}