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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何重用表单(并在需要时更改其上下文)以避免多个相同的表单? C#[关闭]相关的知识,希望对你有一定的参考价值。

我正在使用C#(Visual Studio 2015)创建一个Windows窗体应用程序,并且当涉及到它们具有的控件时,许多窗体应该是相似或相同的。而不是单独制作所有这些相似的形式(因为我最终会有很多形式,这最终会减慢应用程序),我制作了一个基本形式并从中继承了其他形式。但是,我仍然有很多形式,它们只是继承的形式(我猜的代码更少)。

我知道用户控制,但我不认为这就是我想要的。这使得工作更容易,从某种意义上说,我可以添加这个,而不是从底部制作所有这些形式,这样就可以了。问题是我仍然需要将用户控件添加到某个表单 - 表单?我希望能够在一堂课中完成所有这些工作。

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

答案

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

public class Country
{
    public string Name {get;set;}
    public string Description {get;set;}
    public string MapUrl {get;set;}
    public string History {get;set;}
    //any other properties you need to set. Get these from a database or text file if you want
}

在表单中添加如下方法:

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.
}

以上是关于如何重用表单(并在需要时更改其上下文)以避免多个相同的表单? C#[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Magnolia 中的可重用表单组件

如何管理 App Engine Go 运行时上下文以避免 App Engine 锁定?

BottomNavigationView - 如何避免重新创建片段并重用它们

如何在提交表单后使用“加载”更改按钮文本并在以角度提交后重置表单

如何避免为页面加载和 DOM 更改重复此特定代码?

如何重用线程 - pthreads c