我正在VB.NET中编写Windows窗体应用程序。我有三种形式:主表单,显示帐户列表,帐户表单,允许用户查看/编辑特定帐户的信息,以及允许用户查看/编辑信息的政策表格该帐户的具体政策。我希望表单看起来好像它们都是同一个窗口。示例:当应用程序启动时,用户单击主窗体上列表框中的帐户名称,然后单击“编辑”。我想要发生的是窗口保持在完全相同的位置并且保持相同的确切大小,只有主窗体的内容看起来被替换为帐户窗体的内容。如果用户然后选择从帐户表单编辑策略,则同样如此。当用户完成并单击“保存”时,主窗体将重新启动。通过这整个用例,用户看起来好像他们一直在查看同一个窗口,该窗口的内容也在变化。
我该怎么做?我尝试过类似的东西:
Dim newForm as New AcctForm
newForm.Location = Me.Location
newForm.Show()
Me.Close()
问题在于,如果用户移动原始窗口,新窗口将显示父窗体最初出现的位置,而不是最终出现的位置。
答案 0 :(得分:4)
我看到这已经在评论中了,但我在过去的这种情况下所做的是在应用程序中将每个“表单”构建为自定义控件。然后我有一个实际的表单,导航通过更改父表单上当前加载的自定义控件来工作。要从一个屏幕/视图移动到另一个屏幕/视图,请从窗体的控件集合中删除当前自定义控件并添加新的自定义控件。
我认为这优于手动设置启动位置和大小,因为您可以使用表单的.SuspendLayout()/。ResumeLayout()方法来隐藏用户无法加载控件的临时状态。当您希望一个表单完全被另一个表单替换时,这很难做到。
这也使得在一个地方设置某些表单属性变得容易,并使它们与应用程序保持一致。您甚至可以在表单上有一个区域,其中包含现在将在每个视图中显示的控件。
使用此模式时,我通常会将每个自定义控件都从公共库继承。你可能在一开始就没有具体的基础,但它几乎总是在以后派上用场。
最后,切换到使用此方案比您想象的更容易。只需转到每个当前表单的代码,您会发现每个类当前都继承自System.Windows.Forms.Form。大多数情况下,您真正需要做的就是将它们更改为继承自System.Windows.Forms.Panel,并且您大部分都在那里。
答案 1 :(得分:1)
正如其他人所说,使用自定义控件或面板等重新设计应用程序可能更好。
但是,要回答关于表单看似随机的位置的问题,首先要检查的是每个表单都将StartPosition
属性设置为手动。
如果您的主要表单可以调整大小,那么我还会添加代码以将newForm
调整为相同的大小。
我希望这可以帮助你解决眼前的问题;这样你就可以继续重新设计应用程序了!
答案 2 :(得分:0)
from2.show();
可让您在表单之间切换,并将form2保持在其他顶部
谢谢
答案 3 :(得分:0)
尝试使用ShowDialog()
Dim newForm as New AcctForm
newForm.Location = Me.Location
newForm.ShowDialog()
Me.Close() <-- removed this