【问题标题】:How to fix non-shared member requires an object reference Error?如何修复非共享成员需要对象引用错误?
【发布时间】:2021-08-29 15:40:44
【问题描述】:

所以我试图在一个类中添加 Textbox.Text 但它给了我一个错误非共享成员引用。

我的代码:

Public Class Produtos
    Public Property demonstracao As String
    Public Property none As String
    Public Property percentagem As String
    Public Property valor As Decimal

    Public Sub New(demonstracao As String, none As String, percentagem As String, valor As Decimal)
        Me.demonstracao = demonstracao
        Me.none = none
        Me.percentagem = percentagem
        Me.valor = valor
    End Sub

    Public Shared Function GetListaProdutos() As List(Of Produtos)

        ' instanciar um objeto Lista de produtos
        Dim relProdutos As New List(Of Produtos)
        With relProdutos
            .Add(New Produtos(Textbox1.text, textbox2.text, textbox3.text, textbox4.text))
        End With

        GetListaProdutos = relProdutos
    End Function

End Class

给我错误对非共享成员的引用需要对象引用。每当我放置 Textbox.Text 时

有什么线索吗?

编辑: 我用来将项目添加到单元格的代码。

 For Each produto In listaProdutos
            'demontracao
            tabela.AddCell(New Cell().SetTextAlignment(TextAlignment.CENTER).Add(New Paragraph(produto.demonstracao)))

            'none
            tabela.AddCell(New Cell().SetTextAlignment(TextAlignment.CENTER).Add(New Paragraph(produto.none)))

            'percentagem
            tabela.AddCell(New Cell().SetTextAlignment(TextAlignment.CENTER).Add(New Paragraph(produto.percentagem)))

            'valor
            tabela.AddCell(New Cell().SetTextAlignment(TextAlignment.CENTER).Add(New Paragraph(produto.valor)))


        Next

【问题讨论】:

  • 您的 TextBox 引用是不同类的实例成员,GetListaProdutos() 是静态 (Shared) 方法。您的Produtos 类如何在不引用此类的情况下知道或访问另一个类的实例成员?该方法每次也返回一个新列表。你确定这是你需要的吗? + 不要写这个东西:GetListaProdutos = relProdutos,写Return relProdutos。
  • @Jimi 再次感谢您的意见。我已经编辑了主要问题,显示了我必须将项目添加到单元格的代码。我认为它只会插入第一行“.Add(New Produtos(Textbox1.text, textbox2.text, textbox3.text, textbox4.text))”而不是更多。让我知道我是否错了以及如何修复参考错误。
  • 好吧,您可以将 TextBoxes Text 值传递给您的 Produtos 类的构造函数并使用这些值设置其属性,然后在 GetListaProdutos() 中返回类属性,这当然是不得声明为Shared。假设您的类的实例是在包含这些文本框的类中创建的。 -- 注意-这很重要-您正在尝试直接从字符串值生成 Decimal 值。为了您自己的理智,请将 Option Strict 设置为 ON。
  • @Jimi 任何关于我该怎么做的线索,伙计?谢谢
  • 我想我刚才已经描述过了。

标签: .net vb.net


【解决方案1】:

您为什么想要一个单一产品的列表?我想你会想用Produtos 的属性填写文本框。然后将产品添加到列表中。我不知道您编辑中的代码与Produtos 有什么关系。

如果你想继续使用你刚才引用文本框所在的表单的代码。

            .Add(New Produtos(Form1.TextBox1.Text, Form1.TextBox2.Text, Form1.TextBox3.Text, Form1.TextBox4.Text))

我不建议这样做。该类应该独立于用户界面。将值传递给您的类,而不是文本框的属性。该类不应该关心值的来源。就像构造构造函数一样。

在课堂上列出列表在这里没有意义。我认为在表格中列出清单会更好。

你的班级应该是这样的。

Public Class Produtos
    Public Property demonstracao As String
    Public Property none As String
    Public Property percentagem As String
    Public Property valor As Decimal

    Public Sub New(demonstracao As String, none As String, percentagem As String, valor As Decimal)
        Me.demonstracao = demonstracao
        Me.none = none
        Me.percentagem = percentagem
        Me.valor = valor
    End Sub
End Class

然后表单中的代码为列表声明一个类级变量并构建您的列表。

Private relProdutos As New List(Of Produtos)

Private Sub AddProduct()
    Dim Valor As Decimal
    If Decimal.TryParse(TextBox4.Text, Valor) Then
        relProdutos.Add(New Produtos(TextBox1.Text, TextBox2.Text, TextBox3.Text, Valor))
    Else
        MessageBox.Show("Please enter a valid number for Valor")
    End If
End Sub

【讨论】:

    猜你喜欢
    • 2015-10-18
    • 1970-01-01
    • 2015-08-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 2016-02-27
    相关资源
    最近更新 更多