为了轻松合并*.Designer.vb
文件中的更改(同样适用于*.Designer.cs
文件),我需要在Designer生成的文件中对某些代码段的内容进行排序因为Visual Studio is sometimes reordering them randomly。我可以在重新排列之前看到16个合并冲突, 0 之后的冲突。
我对排序声明等毫无疑问。但我对ResumeLayout(false)
方法结束时的PerformLayout()
和InitializeComponent()
调用表示怀疑。尽管有一些学习,但我还没有完全了解它们是如何工作的(practical details found here),因此我正在寻找答案是否可以安全地重新安排它们的对象顺序。呼吁。到目前为止,使用Designer测试没有显示问题,但我要求确定。
Private Sub InitializeComponent()
'...initializations of controls are left out
'
'Form1
'
Me.ClientSize = New System.Drawing.Size(784, 562)
Me.Controls.Add(Me.TableLayoutPanel1)
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.Name = "Form1"
Me.Text = "Form1 Title"
'original order created by Designer
CType(Me.ErrorProvider1, System.ComponentModel.ISupportInitialize).EndInit()
Me.TableLayoutPanel1.ResumeLayout(False)
Me.TableLayoutPanel1.PerformLayout()
Me.page2.ResumeLayout(False)
Me.page2.PerformLayout()
Me.page1.ResumeLayout(False)
Me.TableLayoutPanel2.ResumeLayout(False)
Me.TableLayoutPanel2.PerformLayout()
Me.TabCtl1.ResumeLayout(False)
CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit()
'end of section in question
Me.ResumeLayout(False)
End Sub
Private Sub InitializeComponent()
'...initializations of controls are left out
'
'Form1
'
Me.ClientSize = New System.Drawing.Size(784, 562)
Me.Controls.Add(Me.TableLayoutPanel1)
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.Name = "Form1"
Me.Text = "Form1 Title"
'the following lines (or pairs) were arranged alphabetically - is it OK?
CType(Me.ErrorProvider1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit()
Me.page1.ResumeLayout(False)
Me.page2.ResumeLayout(False)
Me.page2.PerformLayout()
Me.TabCtl1.ResumeLayout(False)
Me.TableLayoutPanel1.ResumeLayout(False)
Me.TableLayoutPanel1.PerformLayout()
Me.TableLayoutPanel2.ResumeLayout(False)
Me.TableLayoutPanel2.PerformLayout()
'end of sorted groups
Me.ResumeLayout(False)
End Sub
这种改变总是安全吗?或者命令是否应该根据控件的树层次结构(首先列出父级)而不是按字母顺序排列?
编辑:一些进一步的研究表明,表格设计师首先将祖先放在首位,但不强制执行其他特定排序。控制顺序仅由Control.Add()
次调用的顺序决定。也许我可以改进排序方法来反映这一点,我应该是安全的。
答案 0 :(得分:0)
我自己的答案是可能不是。在我最新的解决方案中,我避免依赖于确切的答案。
我通过将对象排序为树(将父对象放在第一个+按字母顺序排列在每个节点内)而不是按平面字母顺序转储对象来解决问题。这保留了Visual Studio设计器在订购对象时的逻辑,同时还修复了Visual Studio" randomness"通过应用总是确定性的订单。
重新安排*.Designer.vb
内容的工具正在完成其工作。如果有兴趣的话,我可能会把它作为开源发布。