ivirusyx
Goto Top

Eine funktionierende Private Sub Formel als Public Function

Ich habe eine funktionierende Formel auf mehrere Elemente verteilt und möchte diese nun als Public Function definieren,
jedoch kriege ich es einfach nicht gebacken diesesmal..

Hallo an alle face-smile
Ich bin relativ neu in der Programmation und bastele seit 3 Tagen an einem Password Generator.
Der funktioniert relativ gut und nun moechte ich noch einiges aufraeumen und all die Formeln die des oefteren benutzt werden als Function zusammenfassen

Ich habe zBsp hier eine TextBox in der ich mit der Formel unten nur die Eingabe von "0123456789" erlaube.
So als Private Sub funktioniert das auch relativ gut aber ich kriege die Formel unten einfach nicht in eine Public Function

Private Sub TxBxRndNum_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TxBxRndNum.TextChanged
Dim charactersAllowedNUM As String = "0123456789"
Dim theText As String = TxBxRndNum.Text
Dim Letter As String
Dim SelectionIndex As Integer = TxBxRndNum.SelectionStart
Dim Change As Integer

For x As Integer = 0 To TxBxRndNum.Text.Length - 1
Letter = TxBxRndNum.Text.Substring(x, 1)
If charactersAllowedNUM.Contains(Letter) = False Then
theText = theText.Replace(Letter, String.Empty)
Change = 1
End If
Next

TxBxRndNum.Text = theText
TxBxRndNum.Select(SelectionIndex - Change, 0)
End Sub

Die Public Funtion würde dann so aussehen mit der Ausfuehrung (nun werded ihr aber etwas feststellen... dazu untendrunter):

Public Function blockCharNotNum(Input)

Dim charactersAllowedNUM As String = "0123456789"
Dim theText As String = Input
Dim Letter As String
Dim SelectionIndex As Integer = Input.SelectionStart
Dim Change As Integer

For x As Integer = 0 To Input.Length - 1
Letter = Input.Substring(x, 1)
If charactersAllowedNUM.Contains(Letter) = False Then
theText = theText.Replace(Letter, String.Empty)
Change = 1
End If
Next

Input = theText
Input.Select(SelectionIndex - Change, 0)

End Function

Private Sub TxBxPswdLgth1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TxBxPswdLgth1.TextChanged

TxBxPswdLgth1.Text = blockCharNotNumerical(TxBxPswdLgth1.Text)

End Sub


Ja... zuerst weiß ich nicht richtig wie ich den Output definiere, ich habe es schon mit "Return Input = theText" probiert aber was ist dann mit " Input.Select(SelectionIndex - Change, 0)"?

Ich hoffe ihr koennt mir helfen!
MFG Michel

P.S.: Bitte überseht die vielen Programmierfehler fürs erste, ich bin Anfänger face-smile

Content-Key: 166881

Url: https://administrator.de/contentid/166881

Ausgedruckt am: 28.03.2024 um 11:03 Uhr

Mitglied: SlainteMhath
SlainteMhath 25.05.2011 um 12:56:29 Uhr
Goto Top
Moin,

Vorab: Benutze doch bitte code-tags, wenn Du code postest, das macht das lesen leicher face-smile

Bitte überseht die vielen Programmierfehler fürs erste, ich bin Anfänger
Ok face-smile

Public Function blockCharNotNum(Input)
Gewöhn dir am besten gleich an, immer den Variablen Typ mit anzugeben

Etwas so:
Public Function blockCharNotNum(theText as string) as string

Dim Letter As String
Dim SelectionIndex As Integer = Input.SelectionStart
Dim Change As Integer

For x As Integer = 0 To theText .Length - 1
  Letter = theText .Substring(x, 1)
  If charactersAllowedNUM.Contains(Letter) = False Then
    theText = theText.Replace(Letter, String.Empty)
    Change = 1
  End If
Next

return theText 
end function
Mitglied: iVirusYx
iVirusYx 25.05.2011 um 13:50:34 Uhr
Goto Top
Danke vielmals face-smile
Aber ich kriege noch immer den gleichen Fehler wie vorher:

"An error occurred creating the form. See Exception.InnerException for details. The error is: Public member 'SelectionStart' on type 'String' not found."

Und das nur bei dieser Formel wenn ich eine Public Function draus mache

EDIT:
Also hab ich jetzt einen Fehler bei dir raus gemacht und was versucht, jetzt weiß ich welcher SelectionStart geimeint ist:

    Public Function blockCharNotNum(ByVal theText As String)
        Dim charactersAllowedNUM As String = AllNumChar
        Dim Letter As String
        ' Dim theText As String = Input  
        Dim SelectionIndex As Integer = theText.SelectionStart
        Dim Change As Integer
        For x As Integer = 0 To theText.Length - 1
            Letter = theText.Substring(x, 1)
            If charactersAllowedNUM.Contains(Letter) = False Then
                theText = theText.Replace(Letter, String.Empty)
                Change = 1
            End If
        Next
        Return theText
    End Function

Dabei sagt er dass in Linie 05 der theText.SelectionStart : "SelectionStart ist kein Member von "String"

EDIT2:
Das liegt wahrscheinlich daran dass "theText = Textbox.Text" ist und "SelectionStart" müsste "Textbox.SelectionStart" sein, wie kann ich das jetzt machen?


MFG
Michel
Mitglied: SlainteMhath
SlainteMhath 25.05.2011 um 14:02:05 Uhr
Goto Top
was genau ist denn "Input"? Textbox? String? Array? TreeView? erschliest sich aus deinem Codeschnipsel nicht ganz
Mitglied: iVirusYx
iVirusYx 25.05.2011 um 14:04:47 Uhr
Goto Top
Ich habe meine Antwort noch bearbeitet :

"theText = Textbox.Text" ist und "SelectionStart" müsste "Textbox.SelectionStart"
Also ja... der input "theText" ist ein String aus "Textbox.Text"

Und das ist auch der ganze Fehler face-smile Ich weiss jetzt nur nicht weiter...
Mitglied: SlainteMhath
SlainteMhath 25.05.2011 um 14:14:24 Uhr
Goto Top
Is schon reichlich verworren dein Code face-smile

Versuchs doch mal so:

public function blockCharNotNum(theText as string) as string

Dim charactersAllowedNUM As String = "0123456789"  
Dim Result as string=""  

for each c as char in theText.ToCharArray
  if charactersAllowedNUM.Contains(c) then
    Result += c
  end if
next

return Result
end function

Private Sub TxBxPswdLgth1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TxBxPswdLgth1.TextChanged

  TxBxPswdLgth1.Text = blockCharNotNum(TxBxPswdLgth1.Text)

End Sub
Mitglied: iVirusYx
iVirusYx 25.05.2011 um 14:26:32 Uhr
Goto Top
Ein ganz anderer Ansatz als der Meine, an dem ich mühselige 8 Stunden verbracht habe, aber es funktioniert einwandfrei und ist zudem auch noch viel leichter! :D
Ich danke dir... mein Ansatz war halt nur gut wenn man ihr direkt auf die Textbox anwendet face-smile

MFG
Michel

P.S.: Wenn der Generator fertig ist werde ich wahrscheinlich das ganze Projekt zur Benotung und Verbesserungsvorschlägen hier beitrage.
Man sei gewarnt dass es das reinste Anfängerchaos ist aber ich gebe mir Mühe (Mühe, Mühe wir spielen blinde Kühe ;)