【问题标题】:How to create own panel with four label inside?如何创建自己的面板,里面有四个标签?
【发布时间】:2016-12-16 06:57:40
【问题描述】:

我想创建一个包含 1 个面板和 4 个标签的用户控件

这是我目前尝试的方法

Public Class OrderPanel
    Inherits Panel

    Public ItemName As String
    Public Quantity As Integer
    Public Price As Decimal
    Public DiscountType As Boolean
    Public DiscountAmount As Decimal
    Public Properties As String
    Public SubTotal As Decimal
End Class

这是设计器文件

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class OrderPanel
    Inherits System.Windows.Forms.UserControl

    'UserControl 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.Label1 = New System.Windows.Forms.Label()
        Me.Label2 = New System.Windows.Forms.Label()
        Me.Label3 = New System.Windows.Forms.Label()
        Me.Label4 = New System.Windows.Forms.Label()
        Me.SuspendLayout()
        '
        'Label1
        '
        Me.Label1.AutoSize = True
        Me.Label1.Font = New System.Drawing.Font("Microsoft YaHei", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.Label1.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(161, Byte), Integer), CType(CType(218, Byte), Integer))
        Me.Label1.Location = New System.Drawing.Point(3, 2)
        Me.Label1.Name = "Label1"
        Me.Label1.Size = New System.Drawing.Size(59, 21)
        Me.Label1.TabIndex = 0
        Me.Label1.Text = "Label1"
        '
        'Label2
        '
        Me.Label2.AutoSize = True
        Me.Label2.Font = New System.Drawing.Font("Microsoft YaHei", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.Label2.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(161, Byte), Integer), CType(CType(218, Byte), Integer))
        Me.Label2.Location = New System.Drawing.Point(3, 23)
        Me.Label2.Name = "Label2"
        Me.Label2.Size = New System.Drawing.Size(59, 21)
        Me.Label2.TabIndex = 1
        Me.Label2.Text = "Label2"
        '
        'Label3
        '
        Me.Label3.AutoSize = True
        Me.Label3.Font = New System.Drawing.Font("Microsoft YaHei", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.Label3.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(161, Byte), Integer), CType(CType(218, Byte), Integer))
        Me.Label3.Location = New System.Drawing.Point(3, 44)
        Me.Label3.Name = "Label3"
        Me.Label3.Size = New System.Drawing.Size(59, 21)
        Me.Label3.TabIndex = 2
        Me.Label3.Text = "Label3"
        '
        'Label4
        '
        Me.Label4.Font = New System.Drawing.Font("Microsoft YaHei", 14.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))
        Me.Label4.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(161, Byte), Integer), CType(CType(218, Byte), Integer))
        Me.Label4.Location = New System.Drawing.Point(257, 0)
        Me.Label4.Name = "Label4"
        Me.Label4.RightToLeft = System.Windows.Forms.RightToLeft.Yes
        Me.Label4.Size = New System.Drawing.Size(128, 23)
        Me.Label4.TabIndex = 3
        Me.Label4.Text = "Label4"
        Me.Label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
        '
        'OrderPanel
        '
        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
        Me.Controls.Add(Me.Label4)
        Me.Controls.Add(Me.Label3)
        Me.Controls.Add(Me.Label2)
        Me.Controls.Add(Me.Label1)
        Me.Name = "OrderPanel"
        Me.Size = New System.Drawing.Size(386, 66)
        Me.ResumeLayout(False)
        Me.PerformLayout()

    End Sub

    Friend WithEvents Label1 As Label
    Friend WithEvents Label2 As Label
    Friend WithEvents Label3 As Label
    Friend WithEvents Label4 As Label
End Class

当我尝试将此用户控件添加到我的表单时,我收到此错误

“加载工具箱项目失败,将从工具箱中删除”

我该如何解决这个问题?

【问题讨论】:

  • 查看设计器文件和您的代码文件的顶部。有两个继承:UserControlPanel,这在 VB .NET 中是不允许的。删除设计器文件中的继承并将其保留在代码文件中的Panel,反之亦然,将设计器文件更改为继承Panel 并在代码文件中将其删除。
  • @AlexB。看起来我们几乎在同一时间得出了相似的答案。让我知道如果你想让我把我的拿下来让你的升上去。
  • @AndrewMortimer 我猜我们的答案并不完全相同。我建议将继承更改为 Panel 而不是 UserControl,因为这将删除 OrderPanel 类中的所有 Panel 特定属性。如果有意义,请参阅我的答案。你可以保留你的肯定。

标签: vb.net user-controls custom-controls panel custom-panel


【解决方案1】:

Andrew 的回答很好,但是当您将继承更改为UserControl 时,您将丢失OrderPanel 类中的所有Panel 特定属性(如AutoScaleDimensions)。

所以我建议保留Panel 继承但删除生成的:

OrderPanel.designer.vb

Partial Class OrderPanel  
        'Inherits System.Windows.Forms.UserControl' <--- delete this
         Inherits Panel '<--- add this

OderPanel.vb

Public Class OrderPanel
    'Inherits Panel <--- delete this

【讨论】:

    【解决方案2】:

    您的 OrderPanel 类应该继承自 UserControl

    Public Class OrderPanel
        Inherits UserControl
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      • 2015-09-01
      • 2012-06-15
      相关资源
      最近更新 更多