Benutzer mit den meisten Antworten
Eine Textbox Text Stringvariable führt in einer Stringbuilder.CopyTo Anweisung zu einer JIT Compiler Fehlermeldung.

Frage
-
Eine Stringvariable mit dem Inhalt "abcdefghijklmnopqrstuvwxyz!" bildet ein anderes Ergebnis als der Text abcdefghijklmnopqrstuvwxyz! in einer Textbox, nach dem starten einer Form ohne Debuggen.
Die Fehlermeldung hatte zum Inhalt: Die Quellzeichenfolge war nicht lang genug. Überprüfen Sie sourceIndex und Zeichenzahl.
Nach dem starten der Form mit der Stringvariable Brückenübergang_zweiteVersion kann ich mit dem Mauszeiger auf die Form, nicht direkt auf die Textbox klicken, um die Wahl, ]select[, auf die Form zu ändern. Ich habe im Form1_Click Event, Me.ActiveControl, Nothing gewählt. Den genauen unterschied in meinem Fall für select, focus und taborder kann ich nicht benennen.
Die aktivierte Form zeigt nach dem drücken der Leertaste die ersten drei Zeichen der Stringvariable. Ich kann solange eine Änderung erreichen bis der Durchlauf bei den letzten drei Zeichen erreicht ist.
Imports System.Text Public Class Form1 WithEvents Billarechnung As TextBox Protected Brückenübergang_zweiteVersion As String = "abcdefghijklmnopqrstuvwxyz!" Protected SourceIndex As Integer Protected slitter As Integer Protected dest(5) As Char Protected whilecatchOutsideoperators As New StringBuilder(Brückenübergang_zweiteVersion) Public Sub New() Me.BackColor = Color.Beige InitializeComponent() Billarechnung = New TextBox Me.Controls.Add(Billarechnung) With Billarechnung .Location = New Point(250, 250) .Text = Brückenübergang_zweiteVersion End With End Sub Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp For SourceIndex = 0 To slitter If slitter < 9 Then whilecatchOutsideoperators.CopyTo(SourceIndex * 3, dest, 3, 3) End If Next SourceIndex Select Case e.KeyCode Case Keys.Space slitter += 1 Me.Invalidate() End Select End Sub Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint With e.Graphics .DrawString(dest, New Font("Consolas", 22), New SolidBrush(Color.FromArgb(184, 190, 132, 230)), New Point(420, 170)) End With End Sub Private Sub Form1_Click(sender As Object, e As EventArgs) Handles Me.Click Me.ActiveControl = Nothing Form1_Enter(sender, e) End Sub Private Sub Form1_Enter(sender As Object, e As EventArgs) Handles Me.Enter Me.BackColor = Color.BurlyWood End Sub End Class
Der nächste gewählte Schritt ist die Zeichenfolge abcdefghijklmnopqrstuvwxyz!, mit Kontextmenü, zu kopieren um die Zwischenablage nach dem aufrufen der Form in die Textbox einzufügen. Ich beginne den Zeichenpfad in einen variierenden Zeichenpfad umzuwandeln indem ich statt einer Zuweisung einen Kommentar bilde mit dem Inhalt
' = "abcdefghijklmnopqrstuvwxyz!"
Somit ist die Stringvariable Brückenübergang_zweiteVersion mit keinem zugewiesenem String und in Folge die Textbox leer.
Ich füge nach neuem Aufruf der Form die Zeichenfolge aus der Zwischenablage in die Textbox, klicke auf die Form um die Form zu aktivieren. Sobald ich die Leertaste drücke erhalte ich die Fehlermeldung.
Ich habe die Brückenübergang_zweiteVersion.Length() Stringlänge sowohl mit Zuweisung wie auch ohne betrachtet. Das Ergebnis war in beiden Fällen 27. Ich überprüfte mit einem Button und einem Label. Ich weiß leider nicht wo ich weitersuchen soll.
Herzlichst Stefan
Sonntag, 20.Dezember 2020 zusätzliche Einträge.
Ich versuchte die Suche auf ein wesentliches zu reduzieren. Die sichtbaren Hinweise sind, dass die Stringvariable, also die zugewiesene Textzeile "abcdefghijklmnopqrstuvwxyz!" mit einem Label.Text am Bildschirm ausgegeben werden. In einem Textbox.Text auch.
Nachdem ich nicht alle Eigenschaften ]properties[ der Textbox kenne, beachte ich die Wahrscheinlichkeit, dass der am Bildschirm ausgegebene Text in der Textbox.Text keine, ich kann es nicht genau benennen, Maske oder Platzhalter sind, aber so ähnlich. Worauf ich hinaus will ist der, für mich, unterschied einer Eingabe und Ausgabe. Ein Label.Text ist, für mich, eindeutig nur eine Ausgabe. Da ich mein Problem zu lösen suche gehe ich davon aus, dass die Textbox.Text Textbox Ausgabe auch eine Ausgabe und nicht nur eine Eingabe sein kann.
Ich habe eine literarisch betrachtet zweite Brückenpfosten gebildet, also noch eine Stringvariable.
Protected invasion As String = LSet(Brückenübergang_zweiteVersion, 27)
Nachdem ich mir sicher sein kann, dass die zugewiesene Textzeile, ohne die doppelten Anführungszeichen mit dem Thema ]escape characters[ behandelt zu haben, 27 Zeichen bilden, kann ich zumindest an der Oberfläche kratzen. Die Stringbuilderzeile habe ich auch dementsprechend geändert.
Protected whilecatchOutsideoperators As New StringBuilder(invasion)
Nachdem ich die geänderte Option noch nicht getestet habe, den nach einigen Stunden und in meinen Erfahrungswerten kann ich nicht immer aber manchmal doch einschätzen falls ich mein Ergebnis im nächsten Bild erreichen werde oder nicht. Und nachdem ich ca. sicher bin das ich mein Ergebnis nicht erreichen werde, habe ich auch noch die Textbox.MaxLength = 27 auf 27 gesetzt.
Das neue Environment war, dass ich nicht mehr Textbox.Text Text in die Textbox eingeben konnte. Und zwar wenn dem Textbox.Text die Stringvariable, ohne Text, invasion zugeweisen habe.
Nachdem ich auch diesen neuen Zustand nicht erklären kann, bin ich wie so oft einen Schritt zurück gegangen und habe die Stringvariable Brückenübergang_zweiteVersion zugewiesen. Das Ergebnis war ich konnte wieder in der Textbox tippen. Und auch mit dem Textbox.MaxLength Wert ]value[.
Ich bin mir sicher diese Option führt mich auch nicht zum Ergebnis. Aber ich werde Testen.
Das Ergebnis ist unerwartet. Zum ersten wie getippt ich habe mein Ziel nicht erreicht. Ich kann weiterhin mit dem schon zugewiesenem Text der Brückenübergang_zweiteVersion Stringvariable über den Strinbuilder mit der Leertaste jeweils drei Buchstaben am Bildschirm in der Form ausgeben lassen.
Nur mit dem tippen der Zeichenfolge in die Textbox kann ich mein Ziel noch immer nicht erreichen. Dennoch etwas unerwartetes ich habe keine Fehlermeldung mehr, aber ich kann mit Leertaste auch keine Buchstabenfolgen auf dem Bildschirm ausgeben.
Was jetzt?
- Bearbeitet Stefan Mihael Rihar Sonntag, 20. Dezember 2020 12:14 Fehlersuchoptimierung, mit Erklärung.
Antworten
-
Fall gelöst.
Ich war Felsenfest sicher, die Stringvariable, in meinem Fall, Brückenübergang_zweiteVersion kann nicht nur in der With Anweisung zum speichern des Textbox.Text Textes nach dem Zuweisungszeichen = stehet sondern auch davor.
Habe mich dabei auf die With Anweisung konzentriert um mögliche Hinweise leichter erkennen zu können. Leider bin ich nur für mich Eindeutig.
Ich habe
Brückenübergang_zweiteVersion = Billarechnung.Text.ToString
also in keiner With Anweisung stehen und noch eine Methode getippt.
Sub Kein_Stress_beim_Essen(e As KeyEventArgs) Dim Brückenübergang_zweiteVersion As String Brückenübergang_zweiteVersion = Billarechnung.Text.ToString Dim invasion As String = LSet(Brückenübergang_zweiteVersion, 27) Dim whilecatchOutsideoperators As New StringBuilder(invasion, 27) For ix = 0 To slitter If slitter < 9 Then whilecatchOutsideoperators.CopyTo(ix * 3, dest, 3, 3) End If Next ix Select Case e.KeyCode Case Keys.Space slitter += 1 Me.Invalidate() End Select End Sub
Die Textbox With Anweisung habe ich zu
With Billarechnung .Location = New Point(250, 250) .MaxLength = 27 End With
geändert. Und last but not least
Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp Kein_Stress_beim_Essen(e) End Sub
. Der gesamte Form Code wie folgt:
Imports System.Text Public Class Form1 WithEvents Billarechnung As TextBox Protected SourceIndex As Integer Protected slitter As Integer Protected dest(5) As Char Public Sub New() Me.BackColor = Color.Beige InitializeComponent() Billarechnung = New TextBox Me.Controls.Add(Billarechnung) With Billarechnung .Location = New Point(250, 250) .MaxLength = 27 End With End Sub Sub Kein_Stress_beim_Essen(e As KeyEventArgs) Dim Brückenübergang_zweiteVersion As String Brückenübergang_zweiteVersion = Billarechnung.Text.ToString Dim invasion As String = LSet(Brückenübergang_zweiteVersion, 27) Dim whilecatchOutsideoperators As New StringBuilder(invasion, 27) For ix = 0 To slitter If slitter < 9 Then whilecatchOutsideoperators.CopyTo(ix * 3, dest, 3, 3) End If Next ix Select Case e.KeyCode Case Keys.Space slitter += 1 Me.Invalidate() End Select End Sub Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp Kein_Stress_beim_Essen(e) End Sub Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint With e.Graphics .DrawString(dest, New Font("Consolas", 22), New SolidBrush(Color.FromArgb(184, 190, 132, 230)), New Point(420, 170)) End With End Sub Private Sub Form1_Click(sender As Object, e As EventArgs) Handles Me.Click Me.ActiveControl = Nothing Form1_Enter(sender, e) End Sub Private Sub Form1_Enter(sender As Object, e As EventArgs) Handles Me.Enter Me.BackColor = Color.BurlyWood End Sub End Class
Danke für's lesen, schätz ich, bei mehr als 25 Klicks. Und beim Ausführen des Programmes ohne Debuggen, den Mauszeiger auf eine freie Fläche der Form, nach der Eingabe des Siebenundzwanzigstelligen Textes, klicken und danach die Leertaste drücken bis das Ende erreicht ist. Nachdem Ende ist die Folge zu ende und dennoch kann die Leertaste weiter gedrückt werden.
- Als Antwort markiert Stefan Mihael Rihar Sonntag, 20. Dezember 2020 18:49