1

我正在 VB.NET 中编写一个 Windows 窗体应用程序。我有三个表单:主表单,显示帐户列表,帐户表单允许用户查看/编辑特定帐户的信息,策略表单允许用户查看/编辑信息该帐户的具体政策。我希望表单看起来好像它们都是同一个窗口。示例:当应用程序启动时,用户在主窗体的列表框中单击一个帐户名称,然后单击“编辑”。我想要发生的是窗口保持在完全相同的位置并保持相同的确切大小,只有主表单的内容似乎被替换为帐户表单的内容。如果用户随后选择从帐户表单中编辑策略,则同样如此。当用户完成并单击“保存”时,主窗体又回来了。在整个用例中,用户会觉得他们一直在查看同一个窗口,而该窗口的内容会发生变化。

我怎样才能做到这一点?我试过类似的东西:

Dim newForm as New AcctForm
newForm.Location = Me.Location
newForm.Show()
Me.Close()

问题在于,如果用户移动原始窗口,新窗口会出现在父窗体最初出现的位置,而不是最终出现的位置。

4

4 回答 4

4

我看到这已经在评论中了,但是我过去在这种情况下所做的是将应用程序中的每个“表单”构建为自定义控件。然后我有一个实际的表单,导航通过更改当前加载到父表单上的自定义控件来工作。要从一个屏幕/视图移动到另一个屏幕/视图,请从表单的控件集合中删除当前自定义控件并添加新的自定义控件。

我相信这优于手动设置启动位置和大小,因为您可以使用表单的 .SuspendLayout()/.ResumeLayout() 方法向用户隐藏没有加载控件的中间状态。当您希望一种形式完全被另一种形式取代时,这更难做到。

这也使得在一个地方设置某些表单属性并使它们对于应用程序保持一致变得很容易。您甚至可以在表单上有一个区域,其中包含现在将显示在每个视图中的控件。

使用这种模式时,我通常让我的每个自定义控件都继承自一个公共基础。一开始你可能没有什么具体的事情要处理这个基础,但它几乎总是在以后派上用场。

最后,切换到使用此方案比您想象的要容易。只需转到每个当前表单的代码,您就会发现每个类当前都继承自 System.Windows.Forms.Form。大多数情况下,您真正​​需要做的就是将它们更改为从 System.Windows.Forms.Panel 继承,这样就完成了。

于 2013-08-12T16:04:26.400 回答
1

正如其他人所说,使用自定义控件或面板等重新设计您的应用程序可能会更好。

但是,要回答您关于表单看似随机位置的问题,首先要检查的是每个表单的StartPosition属性设置为手动。

如果您的主窗体可调整大小,那么我也会添加代码以调整newForm到相同的大小。

我希望这有助于您解决眼前的问题;这样您就可以继续重新设计应用程序!

于 2013-08-12T16:38:24.513 回答
0

早上好还有另一种方法。将第二种形式的属性设置为(最顶部)并使用

from2.show();

这使您可以在表单之间切换并保持 form2 居于首位

谢谢

于 2013-12-17T05:19:32.903 回答
0

尝试使用 ShowDialog()

Dim newForm as New AcctForm
newForm.Location = Me.Location
newForm.ShowDialog()
Me.Close() <-- removed this
于 2013-12-17T05:46:49.227 回答