.net - 为什么 New() 在我继承的控件上触发两次? (winforms)

标签 .net vb.net winforms visual-studio-2008

步骤 1 : 创建继承控件类

Public Class Test_Control
    Inherits ListBox

    Public Sub New()
        Items.Add("test")
    End Sub
End Class

步骤 2 : 在设计器中拖动类到窗体

enter image description here

步骤 3 : 运行项目

结果 :

enter image description here

为什么会这样?!我在这里完全被难住了..我用谷歌搜索和谷歌搜索,我找不到任何解决方案或答案。

这给我带来了一些重大问题。我只是想为每个新创建的组合框添加一个初始的“选择一个...”选项。无论控件类型(文本框/组合框/列表框/等)如何,每个继承的控件类都会发生同样的事情。

如果我在 New() 中使用消息框,也会发生同样的事情。一旦我运行我的应用程序,就会出现两个消息框。

enter image description here

最佳答案

您需要告诉设计师不要序列化项目集合:

Public Class Test_Control
  Inherits ListBox

  Public Sub New()
    Items.Add("test")
  End Sub

  <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
  Public Shadows ReadOnly Property Items As ListBox.ObjectCollection
    Get
      Return MyBase.Items
    End Get
  End Property
End Class

就这两个消息框而言,MessageBoxes 并不是一个好的调试工具。您可能正在让 WinForms 设计器调用 new 而运行时也调用 new(或类似的东西)。

关于.net - 为什么 New() 在我继承的控件上触发两次? (winforms),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17866172/

相关文章:

c# - 使用 LINQ 或 lambda 表达式获取该值的值和计数

.net - 如何从 VB.NET 中的匿名类型获取属性

vb.net - VB NET 后台 worker 问题

winforms - 在 VB6 中是否有类似于对话框中的 DialogResult 的东西?

c# - HtmlAgilityPack 读取 html 时出现问题

c# - 从同步上下文调用异步方法

c# - 尝试显示 ListView 中的默认选定值

c# - 如何在 DataGridViewCell 中设置字符串的方向?

.net - 部署在本地 IIS 中时,azure 消息传递服务未接收消息

vb.net - WndProc WM_NCMOUSEUP 不火