Text rückwärts ausgeben

hi, ich habe eine aufgabe zu lösen nur leider weiss ich nicht mehr weiter.
die reihenfolge der ereignisse die statt finden soll:
Button1text =Text rückwärts
textboxtext = benutzerdefinierte Zahlenformatzeichenfolge

button1 klicken -->
textboxtext = (der beispiel text soll nun rückwärts angezeigt werden)
button1text = Text setzen

Ab hier komme ich in meiner prozedur nicht weiter !!!

button1 klick -->
textboxtext = (der beispieltext soll jetzt wieder normal da stehen also nicht mehr rückwärts)
buttontext = text rückwärts

ich hoffe das ist jetzt nicht zu unübersichtlich.
screenshot vom programm:
soweit bin ich bisher:
http://s1.directupload.net/file/d/2474/jatggksq_png.htm

und so sollte die reihenfolge werden:
http://s7.directupload.net/file/d/2474/oaxutp29_png.htm

und hier ist der code den ich verwende:

Public Class Form1

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
txt1.Text = „Benutzerdefinierte Zahlenformatzeichenfolge“
btn1.Text = „Text rückwärts“

End Sub

Private Sub btn1_Click(sender As System.Object, e As System.EventArgs) Handles btn1.Click
Dim strString As String
strString = „Benutzerdefinierte Zahlenformatzeichenfolge“

Dim strNew As String

Dim i As Integer

For i = Len(strString) To 1 Step -1
strNew = strNew & Mid$(strString, i, 1)
Next i

txt1.Text = strNew
btn1.Text = „Text setzen“

End Sub
End Class
ich weiss leider nicht mehr weiter. benötige hilfe

danke im vorraus

Hi,

ich kann zwar leider kein Basic, aber vielleicht kann ich dir ja trotzdem helfen. Wenn ich dich richtig verstanden habe, soll sozusagen beim ersten Klicken der Text umgedreht werden und beim zweiten Klicken alles wie vorher sein, usw. ?
Ich habe gerade geguckt, in Basic gibts auch Static Variablen - deren Werte müssten nach Verlassen der Methode erhalten bleiben. Daher würde ich es in etwa so machen, wobei du es noch an den genauen Syntax von Basic anpassen müsstes:

Private Sub btn1\_Click(sender As System.Object, e As System.EventArgs) Handles btn1.Click
Dim strString As String

Static SchonGeklickt As Bool = FALSE
strString = "Benutzerdefinierte Zahlenformatzeichenfolge"

If SchonGeklickt = TRUE

txt1.Text = strString
btn1.Text = "Text rückwärts"
SchonGeklickt = FALSE

Else

Dim strNew As String

Dim i As Integer

For i = Len(strString) To 1 Step -1
strNew = strNew & Mid$(strString, i, 1)
Next i

txt1.Text = strNew
btn1.Text = "Text setzen"

SchonGeklickt = TRUE
End IF
End Sub 

Wie gesagt, musste noch an den Syntax von Basic anpassen - funktioniert das dann so, wie du es haben möchtest?

Viele Grüße

Manny

Hallo Manfred!

„static“ Variablen gibt es in Basic schon auch, da hast Du Recht.
Dort heißt es „Shared“. Die haben aber (genau wie „static“'s in C#) überhaupt nichts mit dem Beibehalten ihrer Gültigkeit nach dem Verlassen einer Methode zu tun!
Es handelt sich um Variablen (oder auch Eigenschaften oder Methoden), die keinen Instanzbezug haben, sondern von allen Instanzen der Klasse geteilt werden (daher vermutlich die Bezeichnung „Shared“ in VB).
Ihre Gültigkeit behalten alle Membervariablen, die außerhalb einer Methode deklariert sind.

Also besser selber nochmal nachlesen… :smile:

Gruß,
Martin

Hallo Manfred dein Code hat wunderbar funktioniert, vielen Dank dafür. Meine frage wäre jetzt noch, Bei meiner Augabe steht noch dabei Bei Klick auf die Schaltfläche Suchwort suchen(btnSuchen) wird im String nach dem Suchwort gesucht und eine Fundstelle hervorgehoben.Weiß einer wie man das einstellt? bzw. Der Code ist? Habe sowas schon lange nicht mehr gemacht.
Viele Dank

Hallo Martin,

ich hatte vorher nur auf
http://msdn.microsoft.com/de-de/library/z2cty7t8(v=V…
geguckt und dort steht:

„Normalerweise wird eine lokale Variable einer Prozedur gelöscht, sobald die Prozedur beendet wird. Eine statische Variable bleibt erhalten und behält ihren letzten Wert. Beim nächsten Aufruf der Prozedur wird die Variable nicht neu initialisiert. Sie enthält immer noch den Wert, der ihr zuletzt zugewiesen wurde. Eine statische Variable bleibt so lange bestehen wie die Klasse oder das Modul, in der bzw. dem sie definiert ist.“

Und das ist genau das was ich wollte. Auf der Seite steht später auch noch was von Shared, aber das hab ich mir nicht so genau angeguckt.

Viele Grüße

Manfred

vielleicht hilft das ja:
http://www.gutefrage.net/frage/visual-basic-2010—t…

Hallo nochmal!

Das, was Du Dir da angeschaut hast, ist Visual Basic. Das alte, eklige, seit laaaaangem überholte Visual Basic. Keinerlei objektorientierte Konzepte.
Hier im Forum geht es um .NET und damit, wenn’s um Basic geht, um VB.NET, das ist schon ein erheblicher Unterschied.
Es gibt zwar genug Leute da draußen, die auch unter .NET noch ihren „alten Stiefel“ (rein prozedural) programmieren, aber dem muss man ja nicht auch noch Vorschub leisten :smile:

Grüße,
Martin

Hallo Martin,

in VB.net gibt es auch das Schlüsselwort „Static“. Es kennzeichnet eine Variable innerhalb einer Prozedur/Funktion eben als „statisch“, so dass sie über das Verlassen und Wiedereintritt der Prozedur/Funktion hinweg ihren Wert behält.

Das hat mit der einer „Shared“-Variable auf Klassenebene nichts zu tun.

Gruß
Thomas

Hallo Thomas!
Danke für den Hinweis.
So eine Variable würde man aber doch normalerweise als Instanzvariable implementieren, oder siehst Du das anders?
Variablen innerhalb von Prozeduren, die über ihren Gültigkeitsbereich ihren Wert behalten, erscheinen mir konzeptionell sehr fragwürdig.

Gruß,
Martin

Hallo Martin,

Static-Variablen werden halt dann benutzt, wenn man sie wirklich nur innerhalb einer Methode braucht. Man kann das natürlich auch über Instanzvariablen machen, allerdings wird durch die Static-Nutzung deutlich, dass man die Variable sonst nirgends benötigt.
Zugegebenermaßen braucht man Static relativ selten.

Ein Beispiel:

 Public Shared ReadOnly Property ConnectionString() As String
 Get
 Static ConnString As String
 Dim Csb As OracleConnectionStringBuilder

 If ConnString = "" Then
 Csb = New Oracle.DataAccess.Client.OracleConnectionStringBuilder
 Csb.UserID = System.Configuration.ConfigurationManager.AppSettings.Item("dbUser")
 .
 .
 .
 ConnString = Csb.ConnectionString
 End If
 Return ConnString
 End Get
 End Property

ConnString ist als Static-Variable definiert. Natürlich hätte man sie auch außerhalb der Property als z.B. _ConnString definieren können; da man aber diese Variable aber wirklich nur innerhalb der Property braucht, bietet sich hier Static an.

Gruß
Thomas

Hallo!

Danke für die Erläuterung, auch wenn sie mich noch nicht überzeugt hat, dass es sich um ein hilfreiches Feature handelt.

Eigentlich hat man private Instanzvariablen, die nur ein einer Stelle gebraucht werden, recht häufig: Bei praktisch allen öffentlichen Properties gibt es eine private Instanzvariable, in der der jeweilige Wert (ggf. nach entsprechender Validierung im setter) gespeichert wird.
Auf diese privaten Membervariablen kann man bspw. im Konstruktor zugreifen, um ihnen einen Defaultwert zuzuweisen und - je nach Coding-Richtlinie - können diese Variablen bspw. gleich vor dem jeweiligen Property im Code stehen, so dass die inhaltliche Nähe auch darüber ausgedrückt wird.
Auf diese Static-Variablen hat man aber von außen ja gar keinen Zugriff, damit muss eine Initialisierung innerhalb der jeweiligen Methode erfolgen, was insofern wieder unschön ist, als sich der ganze Initialisierungscode der Klasse damit nicht mehr zentral halten lässt.

Aber das Ganze wird langsam recht OT; ich denke, wir sollten es dabei belassen.

Gruß,
Martin