---
title: "Problem med instans av objekt?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/88428-problem-med-instans-av-objekt"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "Vimp"
published: "2003-10-13T19:30:20.000Z"
updated: "2003-10-16T08:36:58.000Z"
replies: 15
views: 634
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/88428-problem-med-instans-av-objekt"
---

# Problem med instans av objekt?

## #1 — Vimp, 2003-10-13T19:30Z

Hej,

Jag tänkte göra en funktion som byter ut flera strängar mot andra, d.v.s som en mer avancerad Replace()-funktion.

Jag får för tillfället följande felmeddelande:

Objektreferensen har inte angetts till en instans av ett objekt. 

Klassen ser ut på följande sätt:

```
Namespace test

    Public Class testing

        Private Function ReplaceString(ByVal StringToReplace As String) As String
            Dim tmpString As String = StringToReplace
            tmpString = tmpString.Replace("0", "noll")
            tmpString = tmpString.Replace("1", "ett")
            tmpString = tmpString.Replace("2", "två")
            tmpString = tmpString.Replace("3", "tre")
            tmpString = tmpString.Replace("4", "fyra")
            tmpString = tmpString.Replace("5", "fem")
            tmpString = tmpString.Replace("6", "sex")
            tmpString = tmpString.Replace("7", "sju")
            tmpString = tmpString.Replace("8", "åtta")
            tmpString = tmpString.Replace("9", "nio")
            Return tmpString
        End Function

        Public Property Banan(ByVal strText As String) As String
            Get
                Return ReplaceString(Banan)
            End Get
            Set(ByVal Value As String)
                strText = Value
            End Set
        End Property

    End Class

End Namespace
```

Code-Behind-filen där jag skapar en instans av "testing" ser ut på följande sätt:

```
...
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim testClass As New testing()
        Literal1.Text = testClass.Banan("1234567890")
    End Sub
...
```

Felmeddelandet tyder på tatt det är **tmpString = tmpString.Replace("0", "noll")** det är fel på.

Permalänk: https://www.webforum.nu/p/88428

## #2 — renholm, 2003-10-13T20:09Z

Har inte så stor kolla på VB.NET men tyckte att din Propertie ser konstig ut, har för mig att man ska använda value objektet för att sätta värden. Dessutom tror jag inte properties kan ta argument utan det du använder ser ut att vara en funktion. Men som jag sa tidigare kan jag inte VB.NET något vidare. Däremot vet jag att frågan inte är någon ASP.NET specifik fråga, flyttas därför till .NET-forumet.

Permalänk: https://www.webforum.nu/p/1186392

## #3 — Engine^, 2003-10-13T21:09Z

Ska du använda dig av properties måste du nog göra såhär

```
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  Dim testClass As New testing()

  testClass.Banan = "1234567890"
  Literal1.Text = testClass.Banan
End Sub
```

Annars måste du skapa en metod eller en konstruktor som tar en sträng som argument.

Permalänk: https://www.webforum.nu/p/1186427

## #4 — Vimp, 2003-10-13T21:26Z

Fungerar fortfarande inte :(
Får följande felmeddelande i VS.NET:
c:\\inetpub\\wwwroot\\CyberZone\\default.aspx.vb(25): Argument not specified for parameter 'strText' of 'Public Property Banan(strText As String) As String'.

På aspx-sidan är det fortfarande samma fel.

Permalänk: https://www.webforum.nu/p/1186439

## #5 — Dino, 2003-10-13T21:38Z

Om jag kommer ihåg min vb.net rätt så skall det väl se ut så här?

```
private _Banan as string
Public Property Banan() As String
   Get
      Return _Banan
   End Get
   Set(ByVal Value As String)
      _Banan = ReplaceString(Value)
   End Set
End Property
```

Permalänk: https://www.webforum.nu/p/1186445

## #6 — Vimp, 2003-10-13T21:46Z

Det händer ingenting nu.
Inget felmeddelande (YES! ;) ), men samtidigt kommer ingen text =(
Hur ska jag skicka med värdet där?
Ska jag lägga till t.ex. strText As String i Banan() ?

Permalänk: https://www.webforum.nu/p/1186453

## #7 — Dino, 2003-10-13T21:48Z

Gör som Engine^ skrev.

Permalänk: https://www.webforum.nu/p/1186454

## #8 — Vimp, 2003-10-13T21:50Z

ÅÅhhh.. ni är ju underbara :e 
Fungerar perfekt :e
Puss på er  :f 

 :birp  :birp  :birp

Permalänk: https://www.webforum.nu/p/1186457

## #9 — Vimp, 2003-10-14T15:51Z

Nu försöker jag göra om koden så att den läser in en XML-fil som innehåller alla strängar som ska bytas ut.
I XML-filen har jag \<OldText\> som innehåller den strängen som ska bytas ut och \<NewText\> som innehåller den nya strängen.
De ligger i sin tur i \<TextToReplace\>.

Jag vet dock ej hur jag ska göra för att sedan byta ut alla OldText mot NewText.
Är det någon som kan ge mig något att gå på?

Permalänk: https://www.webforum.nu/p/1186813

## #10 — Dino, 2003-10-14T19:17Z

Får kolla på det sen, men kan du visa xml filen och hur du tar ut/in datan

Permalänk: https://www.webforum.nu/p/1186986

## #11 — Vimp, 2003-10-14T20:56Z

Jag skickar med alla koder.
Jag har inte hunnit fixa allt som det ska vara så det ligger kanske kvar lite skitkoder.
Men jag är tacksam för att du tar dig tid och kollar igenom detta :)

replace.xml:

```
<?xml version="1.0" encoding="utf-8" ?> 
<TextToReplace>
	<Text>
		<OldText>1</OldText>
		<NewText>ett</NewText>
	</Text>
	<Text>
		<OldText>2</OldText>
		<NewText>två</NewText>
	</Text>
	<Text>
		<OldText>3</OldText>
		<NewText>tre</NewText>
	</Text>
	<Text>
		<OldText>4</OldText>
		<NewText>fyra</NewText>
	</Text>
	<Text>
		<OldText>5</OldText>
		<NewText>fem</NewText>
	</Text>
</TextToReplace>
```

Test.vb

```
Imports System
Imports System.Web
Imports System.Web.UI

Namespace Common

    Public Class Replace : Inherits Control

#Region " Functions "

        Private Function ReadXML(ByVal Source As String) As String
            Dim DS As New DataSet()
            DS.ReadXml(_Source)

            Dim i As Integer
            Dim tmpA As String
            Dim tmpB As String
            Dim strXML As String

            For i = 0 To DS.Tables("TextToReplace").Rows.Count()
                tmpA = DS.Tables("TextToReplace").Columns("OldText")
                tmpB = DS.Tables("TextToReplace").Columns("NewText")
                Source = Source.Replace(tmpA, tmpB)
            Next

            Return Source
        End Function

        Private Function ReplaceString(ByVal StringToReplace As String) As String
            Dim tmpString As String = StringToReplace
            tmpString = tmpString.Replace("0", "noll")
            tmpString = tmpString.Replace("1", "<a href=""http://www.cyberzone.se"" target=""_blank"">CyberZone aeger</a>")
            tmpString = tmpString.Replace("2", "två")
            tmpString = tmpString.Replace("3", "tre")
            tmpString = tmpString.Replace("4", "fyra")
            tmpString = tmpString.Replace("5", "fem")
            tmpString = tmpString.Replace("6", "sex")
            tmpString = tmpString.Replace("7", "sju")
            tmpString = tmpString.Replace("8", "åtta")
            tmpString = tmpString.Replace("9", "nio")
            Return tmpString
        End Function

#End Region

#Region " Properties "

        Private _Replace As String
        Public Property Text() As String
            Get
                Return _Replace
            End Get
            Set(ByVal Value As String)
                '_Replace = ReplaceString(Value)
                _Replace = ReplaceString(Value)
            End Set
        End Property

        Private _Source As String
        Public Property Source() As String
            Get
                Return _Source
            End Get
            Set(ByVal Value As String)
                _Source = Value
            End Set
        End Property

#End Region

#Region " Output "
        Protected Overrides Sub Render(ByVal Output As HtmlTextWriter)
            Output.Write(_Replace)
        End Sub
#End Region

    End Class 'Replace

End Namespace 'Common
```

default.aspx

```
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="default.aspx.vb" Inherits="CyberZone.WebForm1"%>
<%@ Register TagPrefix="CyberZone" Namespace="CyberZone.Common" Assembly="CyberZone" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
	<HEAD>
		<title>WebForm1</title>
		<meta content="Microsoft Visual Studio.NET 7.0" name="GENERATOR">
		<meta content="Visual Basic 7.0" name="CODE_LANGUAGE">
		<meta content="JavaScript" name="vs_defaultClientScript">
		<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
	</HEAD>
	<body MS_POSITIONING="GridLayout">
		<form id="Form1" method="post" runat="server">
			<CyberZone:Replace Text="String 123" runat="server" id="Replace1" />
		</form>
	</body>
</HTML>
```

Permalänk: https://www.webforum.nu/p/1187178

## #12 — Vimp, 2003-10-14T20:57Z

Jag kan säga direkt att jag inte har hunnit fixa till loopen där den ska byta ut informationen i XML-filen..

//Edit
Innehållet i funktionen replacestring är bara temporärt.
Det ska inte användas när allt är klart.

Permalänk: https://www.webforum.nu/p/1187179

## #13 — Dino, 2003-10-14T21:21Z

Om du bara skall byta ut OldText till NewText så borde väl modifierad version av ReadXML funka.

```
For i = 0 To DS.Tables("TextToReplace").Rows.Count()
   tmpA = DS.Tables("TextToReplace").Columns("OldText")
   tmpB = DS.Tables("TextToReplace").Columns("NewText")
   [b]DS.Tables("TextToReplace").Columns("OldText") = tmpB[/b]
   Source = Source.Replace(tmpA, tmpB)
Next

[b]DS.WriteXml(_Source)[/b]
```

Permalänk: https://www.webforum.nu/p/1187195

## #14 — Vimp, 2003-10-15T15:09Z

I default.aspx har jag denna kod:

```
<CyberZone:Replace Text="String 123" runat="server" id="Replace1" />
```

I "Text" vill jag skicka in en sträng.
Sen ska jag ha en loop som kollar igenom XML-filen och om något i strängen finns som OldText i XML-filen ska det bytas ut mot NewText.
Sen ska jag skriva ut den modifierande texten.
Jag vill alltså inte skriva till XML-filen, utan endast läsa in värdena från den.

Permalänk: https://www.webforum.nu/p/1187626

## #15 — Vimp, 2003-10-15T19:14Z

Nu har jag kommit lite längre..
Funderar på att använda XmlDataDocument() eller XmlTextReader() nu.

Jag skickar med koden för test.vb här:

```
Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Xml
Imports System.Data

Namespace Common

    Public Class Replace : Inherits Control

#Region " Properties "

        Private _Replace As String
        Public Property Text() As String
            Get
                Return _Replace
            End Get
            Set(ByVal Value As String)
                '_Replace = ReadXML(_Source, Value)
                _Replace = ReadXML2(_Source, Value)
            End Set
        End Property

        Private _Source As String
        Public Property Source() As String
            Get
                Return _Source
            End Get
            Set(ByVal Value As String)
                _Source = Value
            End Set
        End Property

#End Region

#Region " Functions "

        Private Function ReadXML(ByVal Source As String, ByVal Text As String) As String
            Dim XMLDoc As New XmlDataDocument()

            'Try
            XMLDoc.DataSet.ReadXml(Source)
            Dim i As Integer
            Dim tmpA, tmpB As String
            Dim strXML As String

            For i = 0 To XMLDoc.DataSet.Tables("TextToReplace").Columns.Count - 1
                tmpA = XMLDoc.DataSet.Tables(0).Columns(i).Caption
                tmpB = XMLDoc.DataSet.Tables(0).Columns(i).Caption
                Text = Text.Replace(tmpA, tmpB)
            Next
            'Catch
            'Throw New Exception("Ett fel uppstod.")
            'End Try

            Return Text
        End Function

        Private Function ReadXML2(ByVal Source As String, ByVal Text As String) As String
            Dim reader As XmlTextReader
            Dim tmpA As Integer
            Dim tmpB As Integer

            reader = New XmlTextReader(Source)

            While reader.Read
                tmpA = reader.Value
                reader.MoveToNextAttribute()
                tmpB = reader.Value
                Text = Text.Replace(tmpA, tmpB)
            End While

            Return Text
        End Function

#End Region

#Region " Output "
        Protected Overrides Sub Render(ByVal Output As HtmlTextWriter)
            Output.Write(_Replace)
        End Sub
#End Region

    End Class 'Replace

End Namespace 'Common
```

Som ni ser har jag två olika funktioner där.
Jag tycker själv att readxml2 verkar stabilast. ;)

På default.aspx kör jag denna lilla snutt..

```
<CyberZone:Replace Text="String 123" Source="c:\inetpub\wwwroot\CyberZone\replace.xml" runat="server" />
```

Problemet nu är att det någonstans i koden blir fel  :q 
Får detta felmeddelande:

Sökvägen har inte ett giltigt format.

Den syftar på rad 64 i test.vb.

```
Rad 62:             Dim tmpB As Integer
Rad 63: 
Rad 64:             reader = New XmlTextReader(Source)
Rad 65: 
Rad 66:             While reader.Read
```

Det verkar som sökvägen skickas in på ett felaktigt sätt.
Vore tacksam för ledtrådar som leder till att jag kan lösa detta!

//Mikael Söderström

Permalänk: https://www.webforum.nu/p/1187742

## #16 — Dino, 2003-10-16T08:36Z

Koden är inte testad, men den borde funka tycker jag.

```
Public Class Replace : Inherits Control

   Private _text, _source As String

   Public Property Text() As String
      Get
         Return _text
      End Get
      Set(ByVal Value As String)
         _text = ReplaceString(Value, Source)
      End Set
   End Property

   Public Property Source() As String
      Get
         Return _source
      End Get
      Set(ByVal Value As String)
         _source = Value
      End Set
   End Property

   Function ReplaceString(ByVal TextString As String, ByVal DataSource As String) As String
      Dim sOld As String()
      Dim sNew As String()
      Dim x As Integer = 0

      Dim xdrData As New XmlTextReader(HttpContext.Current.Server.MapPath(DataSource))
      While xdrData.Read()
         If xdrData.NodeType = XmlNodeType.Element Then
            Select Case xdrData.Name
               Case "OldText"
                  sOld(x) = xdrData.ReadString
               Case "NewText"
                  sNew(x) = xdrData.ReadString
                  x += 1
            End Select
         End If
      End While
      xdrData.Close()

      For i As Integer = 0 To sNew.Length - 1
         TextString = TextString.Replace(sOld(i), sNew(i))
      Next
      Return TextString
   End Function

   Protected Overrides Sub Render(ByVal Output As HtmlTextWriter)
      Output.Write(Text)
   End Sub

End Class
```

Permalänk: https://www.webforum.nu/p/1187910

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/88428-problem-med-instans-av-objekt
