【问题标题】:How to create an array of Controls with different types i.e Textbox, combobox, checkbox...based on certain value如何根据特定值创建具有不同类型的控件数组,即文本框、组合框、复选框...
【发布时间】:2017-07-31 21:39:32
【问题描述】:

VB.net 如何根据特定值创建具有不同类型的控件数组,即文本框、组合框、复选框...

这是代码:

Public Function TestControl(c As Integer())
        Dim a As Control()
        Dim l As Point
        Dim F As New Form
        For i As Integer = 0 To c.Length - 1
            If c(i) Then
                a(i) = New TextBox
            Else
                a(i) = New ComboBox
            End If
            a(i).Width = 400
            a(i).Height = 40
            l.Y = 50 + (3 * i - 2) * a(i).Height / 2
            l.X = 150
            a(i).Location = l
            F.Controls.Add(a(i))
        Next
        F.Show()
        Return Nothing
   End Function

当我尝试执行函数时出现以下错误:

变量“a”在被赋值之前被使用。运行时可能会导致空引用异常。

我正在尝试解决它,但我无法成功。 任何想法都会对我很有帮助

谢谢

【问题讨论】:

  • 请阅读How to Ask 并使用tour。你为什么要这样做?它们已经在一个或另一个控件集合中。将它们合并为Control 意味着您不会知道哪些具有Checked 属性,哪些具有SelectedIndex 属性等
  • 这就是我想要实现的想法:我在数据集下有不同的数据。每当我想向表中添加行时,我都会调用带有文本框、组合框、复选框的新表单...取决于列的类型...而不是关闭表单时,我将从这些控件获取数据以更新我的表,
  • 如果这就是你想要的,是什么让你觉得你做不到? Dim ctrl As Control() 声明了一个数组,该数组将包含任何 Control 对象或从 Control 继承的类。
  • 请阅读How to Asktour
  • 'For i As Integer = 0 To c.Length - 1 If c(i) Then ctrl(i) = New TextBox Else ctrl(i) = New ComboBox End If ctrl(i).Location = l F.Controls.Add(ctrl(i)) Next' 其中 c 是一个由 0 和 1 组成的数组......当我运行它时,它给了我一个错误,说检查 ctrl 是否不为空

标签: arrays vb.net combobox textbox controls


【解决方案1】:

为了解决您对“变量‘a’在赋值之前使用它的直接问题。运行时可能导致空引用异常。”

你的问题是那行

Dim a As Control()

只创建一个变量a,它能够保存一个控制对象数组。它实际上并没有创建一个数组,因为它不知道要创建多少个元素。

在您的情况下,解决方案很简单。将行改为

Dim a(c.Length) As Control

这将创建一个空的控件数组,您可以添加您的文本框和组合框。

【讨论】:

  • 大卫,你是 100% 正确的,而且效果很好。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
  • 2020-08-18
  • 2015-09-30
相关资源
最近更新 更多