Windows Forms Designer 更改了我的代码

Windows Forms Designer Changes My Code

我正在尝试在 VB Express 2013 中创建桌面应用程序。用户应该能够使用鼠标更改主窗体大小。但是我想在中间保留一些控件而不改变大小。

所以当我有一个名为 Panel1 的面板时,它的设置如下:

Me.Panel1.location= New System.Drawing.Point((Me.Width/2)-(Me.Panel1.Width/2),0)

这将使面板保持在中间,但是当我添加一些其他控件(比如说菜单条)时,设计器页面会自行重写并且我的设置消失了。

所以我的问题是: 何时(或何处)是设置这些设置的最佳时间和方式。我应该在 Form_Load 事件中这样做吗?

有没有办法阻止 VB Express 覆盖我的代码?

.Designer.vb 文件(或 C# 中的 .designer.cs)属于 Windows Forms Designer。它不是您的代码。它是由一个工具生成的。在代码由工具生成的大多数情况下,您必须不要 接触生成的代码。相反,您必须 "touch" 导致工具生成代码的任何原因(在本例中,Visual Studio 中的设计器界面)或者在其他地方更改代码 - 工具不会触及的地方。

例如,双击设计器中的表单,它会为您创建一个Load事件。添加代码以将 Location 更改为该事件:

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.Panel1.Location = _
            New System.Drawing.Point(CInt((Me.Width / 2) - (Me.Panel1.Width / 2)), 0)
    End Sub
End Class

对于查看设计器代码内部的任何人,他们留下了以下警告:

'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.  
'Do not modify it using the code editor.

(在 C# 中,表示 "Required method for Designer support - do not modify the contents of this method with the code editor." )

任何调整窗体中控件大小或影响控件位置的代码都应放在

Form_Resize Event

通过将代码放在那里,每次调整表单大小时都会执行它。这才是你真正想要的。

如果您在 Form_Load 事件中放置任何调整大小的代码,它将仅在加载表单时执行!