kec*_*eco 1 c# vb.net visual-studio
我创建了一个UserControl没有控件的项目。我这一切都是通过绘画操作完成的。因此控件有很多属性和自定义布局方法来计算这些绘制的“控件”的位置和大小。当影响布局的属性发生更改时,将调用布局方法。
UserControl当初始化带有 my 的表单时,这会导致过度调用 my 布局方法。在我的文章中UserControl,我通过使用标志阻止了布局方法的所有不必要的调用。但我无法控制添加我的表单的设计者UserControl。
有没有办法告诉 Visual Studio 在设计器中设置所有属性之前和之后添加自定义方法,就像使用SuspendLayout和 一样ResumeLayout?或者是否有完全不同的设计方法UserControls?
如果我理解你的意思,你应该做的是实现ISupportInitialize接口并将代码放入BeginInit和EndInit方法中。尝试将 a 添加DataGridView到表单,然后检查设计器代码以查看对这些方法的调用是否自动添加到该InitializeComponent方法中。
请注意,在设计器代码中,控件被强制转换为接口类型以进行该调用。这是因为约定是使实现显式化,这意味着在 VB 中声明方法Private,例如
Imports System.ComponentModel
Public Class InitialisedControl
Implements ISupportInitialize
Private Sub BeginInit() Implements ISupportInitialize.BeginInit
'...
End Sub
Private Sub EndInit() Implements ISupportInitialize.EndInit
'...
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果不强制转换为接口类型,则无法访问成员。这是我的设计器代码文件添加了该控件的实例后的样子:
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'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.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.InitialisedControl1 = New WindowsApp1.InitialisedControl()
CType(Me.InitialisedControl1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'InitialisedControl1
'
Me.InitialisedControl1.Location = New System.Drawing.Point(12, 12)
Me.InitialisedControl1.Name = "InitialisedControl1"
Me.InitialisedControl1.Size = New System.Drawing.Size(150, 150)
Me.InitialisedControl1.TabIndex = 2
'
'Form1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(800, 450)
Me.Controls.Add(Me.InitialisedControl1)
Me.Name = "Form1"
Me.Text = "Form1"
CType(Me.InitialisedControl1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
Friend WithEvents InitialisedControl1 As InitialisedControl
End Class
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |