Funktion um die Textbox mit dem meisten Text zu ermitteln?

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von SpaceyX.

    Funktion um die Textbox mit dem meisten Text zu ermitteln?

    Hallo zusammen!

    Kennt jemand eine kurze und knappe Funktion, um die Textbox aus 100 Textboxen zu ermitteln, die am meisten Text enthält :?:
    Ich stieß auf die Funktion MaxLength, aber die legt nur fest, wieviel Text in der Textbox maximal stehen darf ...
    Selbst programmieren würde unendlich lange dauern
    :wacko: ( -> 100x jede einzelne Textbox auf die restlichen 99 überprüfen ...)
    Deshalb brauche ich eine Funktion, die das schnell erledigt!
    Wer eine kennt, bitte antworten
    :) !

    VisualBasic-Frager

    Zunächst einen herzlichen Glückwunsch, dass Du den Font so schön verstellt hast, wir bevorzugen hier den Standardfont.
    2 Probleme: 1. die Textlänge bestimmen, dafür hat uns Bill die Property TextBox.TextLength gegeben.
    2. Was ist das für ein völliges Design-Desaster, wo 100 TextBoxen vorkommen?
    Iteriere Dich durch alle Textboxen der Forn durch:

    VB.NET-Quellcode

    1. For Each ctrl In Me.Controls
    2. If TypeOf (ctrl) Is TextBox Then
    3. ' Länge bestimmen
    4. End If
    5. Next
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    LaMiy schrieb:

    So müsste es richtig sein, oder?
    Ich würde

    VB.NET-Quellcode

    1. Dim tb = DirectCast(ctrl, TextBox)
    präferieren.
    Eigentlich sollte @VisualBasic-Frager: das selbst lösen, schließlich sind wir hier im Hauptforum.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wie wärs mit LINQ?

    VB.NET-Quellcode

    1. Dim result = (From c As Object In Me.Controls Select c Where TypeOf (c) Is TextBox Select DirectCast(c, TextBox).Text.Length).Max
    2. MessageBox.Show(result.ToString())
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    SpaceyX schrieb:

    Wie wärs mit LINQ?
    Was nützt mir die Länge des Gewinners, wenn ich ihm keine Medaille umhängen kann?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Der Rest dürfte ja auch nicht schwer sein :)

    VB.NET-Quellcode

    1. Private Function tryX() As String
    2. For Each ctrl In Me.Controls
    3. If TypeOf (ctrl) Is TextBox Then
    4. Dim tb As TextBox = CType(ctrl, TextBox)
    5. If tb.TextLength = result Then
    6. Return tb.Name
    7. End If
    8. End If
    9. Next
    10. End Function

    VB.NET-Quellcode

    1. Dim result As Integer = 0
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. result = (From c As Object In Me.Controls Select c Where TypeOf (c) Is TextBox Select DirectCast(c, TextBox).Text.Length).Max
    4. End Sub
    Dann eben 2x LINQ 8o

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    3. Dim result = (From c As Object In Me.Controls Select c Where TypeOf (c) Is TextBox Select DirectCast(c, TextBox).Text.Length).Max
    4. Dim result1 = From c As Object In Me.Controls Select c Where DirectCast(c, TextBox).Text.Length = result
    5. Dim tB As TextBox = DirectCast(result1(0), TextBox)
    6. tB.BackColor = Color.Red
    7. End Sub
    8. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Will auch mein Senf dazu geben ;)

    VB.NET-Quellcode

    1. Dim allTextBoxes = From c In Me.Controls Where TypeOf c Is TextBox Select c
    2. Dim maxLength = allTextBoxes.Max(Function(x) CType(x, TextBox).Text.Length)
    3. Dim maxLengthTextBoxes = From c In allTextBoxes Where DirectCast(c, TextBox).Text.Length = maxLength
    4. For Each c In maxLengthTextBoxes
    5. With DirectCast(c, TextBox)
    6. Debug.Print("Name: '{0}', Text: '{1}', TextLength: '{2}'", .Name, .Text, .TextLength)
    7. End With
    8. Next
    Hab auch noch etwas Senf :D

    VB.NET-Quellcode

    1. Dim longest = 0
    2. Dim winner = String.Empty
    3. For Each ctrl In Me.Controls.OfType(Of TextBox)()
    4. If ctrl.Text.Length > longest Then longest = ctrl.Text.Length : winner = ctrl.Name
    5. Next
    6. Me.Controls(winner).BackColor = Color.Green

    mfG

    Derfuhr

    RodFromGermany schrieb:

    SpaceyX schrieb:

    Wie wärs mit LINQ?
    Was nützt mir die Länge des Gewinners, wenn ich ihm keine Medaille umhängen kann?

    genau zu diesem Problem meine neueste Linq-Erfindung: Linq-Extremum-Extension

    VB.NET-Quellcode

    1. dim Winner = alle100TextBoxes.MaxBy(function(tb)tb.TextLength)
    /problem solved