Link aus RichTextBox öffnen

  • VB.NET
  • .NET 4.5

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von Sarah.

    Link aus RichTextBox öffnen

    Hallo zusammen,

    ich steh mal wieder von einem Problem... und komm trotz stundenlanger recherche zu nichts.
    Ich hab in meiner Form eine Richtextbox in der Kommentare zu einem Projekt aus einer .txt geladen werden.
    Jeder kommentar beginnt mit einem Datum (soll Fett markiert werden) und kann in den folgenden Zeilen auch gerne links enthalten.
    Deshalb habe ich mich für eine Richtextbox entschieden.
    Bei dem Click-Event lese ich nun aus, ob ich auf ein Datum klicke, denn dann soll im Webbrowser der Explorer dazu geöffnet werden.
    Klick ich auf eine web-Adresse, soll der Standardbrowser geöffnet werden und falls ein Pfad ausgewählt wird, dann soll dieser auch im Webbrowser angezeigt werden.

    Mein Problem ist nun das öffnen des Standardbrowsers. Sobwald ich auf einen link (z.B. google.de) klicke, behält meine Richttextbox diese Position. (--> Zeile 60)
    Öffne ich den Link in meinem Webbrowser auf der Form funktioniert alles bestens. (--> Zeile 59)

    Ich hoff ich konnte es einigermaßen rüberbringen.

    Im Anhang hab ein Screenshot der Oberfläche, vielleicht macht die es etwas verständlicher :/

    Hier ein Ausschnitt des Problemcodes: (Bin übrigen absoluter Anfänger und über Tips sehr dankbar, falls etwas ganz schrecklich ist :) )

    VB.NET-Quellcode

    1. Private Sub RichTextBox1_Click(sender As Object, e As EventArgs) Handles RichTextBox1.Click
    2. 'Felder leeren
    3. Form3.Komm_ID.Text = ""
    4. Form3.Komm_Zeile1.Text = ""
    5. Form3.Komm_Zeile2.Text = ""
    6. Form3.Komm_Zeile3.Text = ""
    7. Form3.Komm_Zeile4.Text = ""
    8. Form3.Komm_Zeile5.Text = ""
    9. 'Ausgewähle Zeile auslesen
    10. Dim Ausw_ZeileIndex As Integer = RichTextBox1.GetLineFromCharIndex(RichTextBox1.SelectionStart)
    11. Dim Ausw_Zeile As String = RichTextBox1.Lines(Ausw_ZeileIndex)
    12. 'Aktuelle Position der Richtextbox - zur Info
    13. Dim pos As Integer = RichTextBox1.SelectionStart
    14. MsgBox(pos)
    15. If RichTextBox1.GetLineFromCharIndex(RichTextBox1.SelectionStart) <> 0 Then
    16. If Ausw_Zeile.Length = 10 Then
    17. 'DATUM AUSGEWÄHLT
    18. If Ausw_Zeile.Substring(2, 1) = "." And Ausw_Zeile.Substring(5, 1) = "." Then
    19. 'Markierten Text in DB suchen
    20. Dim index = 0
    21. For Each DB_Zeile As String In TextBox14.Lines
    22. index += 1 ' Zeilennummern von 1 ... n
    23. If DB_Zeile.Contains(Ausw_Zeile) Then
    24. 'Kommentar aus Datenbank in Textfelder übernehmen
    25. Form3.Komm_ID.Text = DB_Zeile
    26. Form3.Komm_Zeile1.Text = TextBox14.Lines(index)
    27. Form3.Komm_Zeile2.Text = TextBox14.Lines(index + 1)
    28. Form3.Komm_Zeile3.Text = TextBox14.Lines(index + 2)
    29. Form3.Komm_Zeile4.Text = TextBox14.Lines(index + 3)
    30. Form3.Komm_Zeile5.Text = TextBox14.Lines(index + 4)
    31. Label12.Text = Form3.Komm_ID.Text
    32. 'PFAD AUSLESEN
    33. Dim dd As String = Form3.Komm_ID.Text.Substring(0, 2)
    34. Dim mm As String = Form3.Komm_ID.Text.Substring(3, 2)
    35. Dim yyyy As String = Form3.Komm_ID.Text.Substring(6, 4)
    36. Dim Browser As String = ProjektePfad & Abteilung & "_" & Bereich & "\" & TextBox4.Text & "\" & yyyy & "_" & mm & "_" & dd
    37. 'MsgBox(Browser)
    38. If IO.Directory.Exists(Browser) Then
    39. WebBrowser1.Navigate(Browser)
    40. 'TabControl4.TabPages(4).BackColor
    41. Else
    42. IO.Directory.CreateDirectory(Browser)
    43. WebBrowser1.Navigate(Browser)
    44. End If
    45. End If
    46. Next
    47. End If
    48. 'LINK AUSGEWÄHLT
    49. ElseIf Ausw_Zeile.Contains("www.") Or Ausw_Zeile.Contains("http") Then
    50. Label12.Text = Ausw_Zeile
    51. WebBrowser1.Navigate(Ausw_Zeile) 'Funktioniert tadellos
    52. 'Process.Start(Ausw_Zeile) 'Einmal geklickt, bleibt die Position immer
    53. 'PFAD AUSGEWÄHLT
    54. ElseIf Ausw_Zeile.Contains(":\") Or Ausw_Zeile.Contains("\\") Then
    55. If Not Ausw_Zeile.Contains("www.") Or Ausw_Zeile.Contains("http") Then
    56. Label12.Text = Ausw_Zeile
    57. WebBrowser1.Navigate(Ausw_Zeile)
    58. RichTextBox1.Select(240, 0)
    59. End If
    60. 'LEERE ZEILE AUSGEWÄHLT
    61. Else
    62. Label12.Text = ""
    63. WebBrowser1.Navigate("about:blank")
    64. End If
    65. End If
    66. End Sub 'KOMMENTAR LADEN


    Liebe Grüße
    Sarah
    Bilder
    • Form.JPG

      115,61 kB, 1.218×560, 41 mal angesehen
    @Sarah Ich habs nicht ganz verstanden.
    Wenn Du wohin klickst passiert was, was nicht passieren soll?
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Ich hab's mal gekürzt auf:

    VB.NET-Quellcode

    1. Dim Ausw_ZeileIndex As Integer = RichTextBox1.GetLineFromCharIndex(RichTextBox1.SelectionStart)
    2. Dim Ausw_Zeile As String = RichTextBox1.Lines(Ausw_ZeileIndex)
    3. Dim pos As Integer = RichTextBox1.SelectionStart
    4. If RichTextBox1.GetLineFromCharIndex(RichTextBox1.SelectionStart) <> 0 Then
    5. If Ausw_Zeile.Length = 10 Then
    6. ElseIf Ausw_Zeile.Contains("www.") Or Ausw_Zeile.Contains("http") Then
    7. Label12.Text = Ausw_Zeile
    8. Diagnostics.Process.Start(Ausw_Zeile) 'Einmal geklickt, bleibt die Position immer
    9. Else
    10. Label12.Text = ""
    11. End If
    12. End If
    13. End Sub 'KOMMENTAR LADEN

    Klappt erstmal. Wobei Du Zeile#4 auch gleich ändern kannst zu:

    VB.NET-Quellcode

    1. If Ausw_Zeile > 0 Then

    Was Du mit »bleibt die Position immer« meinst, versteh ich auch nicht.

    Das geht aber insofern einfacher, weil die RTB ein LinkClicked-Event hat. Dann kannst Du schreiben:

    VB.NET-Quellcode

    1. Private Sub RichTextBox1_LinkClicked(sender As Object, e As LinkClickedEventArgs) Handles RichTextBox1.LinkClicked
    2. Diagnostics.Process.Start(e.LinkText)
    3. End Sub

    Dadurch wird jeder Link im Standardwebbrowser aufgerufen. Ist natürlich durch Zusatzcode änderbar.

    Zu Verbesserungsvorschlägen in Deinem Code von Post#1:
    • Es geht los bei Zeile#4: Dialoge richtig instanziieren
    • Z#17: Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden
    • Z#23: Der Unterschied zwischen And und AndAlso/Or und OrElse
    • Und: benenne Deine CEs vernünftig. Über WebBrowser1 könnte man hinwegsehen. Aber Label12? Da sollte man schon beim Codelesen über den Namen erfahren, was in dem Label drinsteht, z.B. LblCurrentLine oder LbClickedText oder so. Wenn man erstmal genügend CEs auf'm Form hat und dauernd im Designer nachschauen muss, welches CE für welchen Inhalt oder welche Aktion zuständig ist, weiß man, dass man da was ändern muss. Ich spreche aus Vor-Forum-Erfahrung.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Guten Morgen zusammen

    @RodFromGermany

    RodFromGermany schrieb:

    Wenn Du wohin klickst passiert was, was nicht passieren soll?

    Mein Problem ist, dass wenn ich den Link über "Prozess.Start" öffne, meine RtB ihre Position nicht verlässt.

    Wenn ich auf "C:\temp" klicke bin ich beispielsweise auf Position 147
    klicke ich dann auf "www.google.de", springt die RtB auf Position 195
    dann geht auch der Standardbrowser auf aber die RtB bleibt auf Position 195 egal wo ich hinklicke und es öffnet sich immer wieder google


    @VaporiZed Dank für die ausführliche Antwort!

    Wobei Du Zeile#4 auch gleich ändern kannst zu:

    :rolleyes: Ja, das hätt ich auch al Anfänger sehen können/sollen


    Das geht aber insofern einfacher, weil die RTB ein LinkClicked-Event hat.

    Mit dem LinkClicked-Event hab ich angefangen. Aber die RtB erkennt nicht alles als Link.
    Und weil ich auch das Datum abfrage - dementsprechend auch sagen muss, was ist wenn man ins "leere" klickt - bin ich da nicht allzu weit gekommen.


    Zu Verbesserungsvorschlägen in Deinem Code von Post#1:

    Mega!!! Danke!!!! Bin gerade dabei deine Punkte abzuarbeiten :thumbsup:
    Hab natürlich mit Strict On nen Sack voll Fehler bekommen. Bei einem häng ich gerade noch

    VB.NET-Quellcode

    1. For i = 0 To ListBox2.Items.Count - 1
    2. Dim ArrayText() As String = ListBox2.Items(i).Split(str)
    3. 'Wenn ID gefunden, dann diese Zeile durch die Neue ersetzen
    4. If ArrayText(0) = TextBox4.Text Then
    5. ListBox2.Items(i) = TextBox4.Text & str & TextBox3.Text & str & ComboBox1.Text & str & DateTimePicker1.Value & str
    6. End If
    7. Next

    Hier hab ich bei "ListBox2.Items(i).Split(str)" den Fehler ?(
    "Option Strict On" lässt spätes Binden nicht zu.




    Vielen Dank für all die Hilfe! Das ist echt ein tolles Forum! :thumbsup:

    Griaßle aus dem Allgäu
    Sarah

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Sarah“ ()

    Sarah schrieb:

    Mein Problem ist, dass [...] meine RtB ihre Position nicht verlässt
    Warum und wohin sollte sich die RTB bewegen, wenn man was anklickt? Wenn man einen Button anklickt, wandert der doch auch nicht an einen anderen Stelle auf dem Formular.

    Ach jetze! Position kann so vieles beim Programmieren sein. Es geht Dir um die Caret-(= Texteingabecursor) Position innerhalb der RTB. Ok. Warum ist das ein Problem?
    Bzgl. des Fehlers: Von welchem Datentyp ist ListBox2.Items(0), was genau ist .Split() und welchen Datentyp verarbeitet Split? Hilfe zur Selbsthilfe.
    Kleine Anmerkung für einen wahrscheinlich baldig auftauchenden Fehler. "a" ist für den Compiler ein String, "a"c ein Char.

    Sarah schrieb:

    Aber die RtB erkennt nicht alles als Link.
    Dein Code auch nicht. Aber wenn Du schon ein System hast, bei dem all Deine Links erkannt werden, dann ist gut.

    btw: Ich muss einen Doppelklick auf den Link machen, dann öffnet sich der Internet-Browser und die Caretposition ändert sich auf die Position des 1. Linkzeichens. Danach kann ich auf eine andere Stelle innerhalb der RTB klicken und das Caret folgt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Ja genau, das ist das Problem. Es ist deshalb so be*****scheiden, weil ich nach dem öffnen eines "www"-Links nichts anderes mehr auswählen kann. Wenn die Curerposition auf dem "www"-Link bleibt, öffnet es immer den Browser, obwohl ich beispielsweise ein Datum anklicke.

    Ich muss einen Doppelklick auf den Link machen, dann öffnet sich der Internet-Browser und die Caretposition ändert sich auf die Position des 1. Linkzeichens. Danach kann ich auf eine andere Stelle innerhalb der RTB klicken und das Caret folgt.

    ;( Ich verzweifel.... bei mir öffnet der 100x google...



    Bzgl. des Fehlers: Von welchem Datentyp ist ListBox2.Items(0), was genau ist .Split() und welchen Datentyp verarbeitet Split? Hilfe zur Selbsthilfe.
    Kleine Anmerkung für einen wahrscheinlich baldig auftauchenden Fehler. "a" ist für den Compiler ein String, "a"c ein Char.

    Sorry, falls ich manches falsch verstehe, bin mit den Fachbegriffen absolut noch nicht vertraut. Aber man lernt ja jeden Tag dazu :D

    ListBox2.Items(0) sollte ein String sein. Mit .Split() sollte der der String in Arrays gesplittet werden. str ist der Trenner (Public str As String = ";")

    Hier mal der ganze block:

    VB.NET-Quellcode

    1. ElseIf TextBox5.Text = "Bearbeiten Aktiv" Then
    2. 'Projektdatei anlegen, wenn nicht vorhanden:
    3. Dim DatenbankDatei As String = Progpfad & "Daten\Projekte\" & Abteilung & "_" & Bereich & ".csv"
    4. If Not System.IO.File.Exists(DatenbankDatei) Then
    5. File.WriteAllText(DatenbankDatei, "")
    6. End If
    7. Dim strText As String = ""
    8. ListBox2.Items.Clear()
    9. For Each strZeile As String In System.IO.File.ReadAllLines(DatenbankDatei, System.Text.Encoding.GetEncoding("Windows-1252"))
    10. ListBox2.Items.Add(strZeile)
    11. Next
    12. For i = 0 To ListBox2.Items.Count - 1
    13. Dim ArrayText() As String = ListBox2.Items(i).Split(str) ######FEHLER
    14. 'Wenn ID gefunden, dann diese Zeile durch die Neue ersetzen
    15. If ArrayText(0) = TextBox4.Text Then
    16. ListBox2.Items(i) = TextBox4.Text & str & TextBox3.Text & str & ComboBox1.Text & str & DateTimePicker1.Value & str
    17. End If
    18. Next
    19. 'Datenbank überschreiben
    20. Dim writer As IO.StreamWriter = New IO.StreamWriter(DatenbankDatei, False, System.Text.Encoding.GetEncoding("Windows-1252"))
    21. For i = 0 To ListBox2.Items.Count - 1
    22. writer.WriteLine(ListBox2.Items(i))
    23. Next
    24. writer.Close()
    25. letzter_ID = TextBox4.Text
    26. MessageBox.Show("Projekt wurde geändert")
    27. End If
    Kann ich immer noch nicht nachvollziehen. Aber: Um das ganze zumindest zu umgehen, deaktiviere zu Programmbeginn die Linkerkennung: RichTextBox1.DetectUrls = False

    Sarah schrieb:

    ListBox2.Items(0) sollte ein String sein.
    also Sollzustand

    VaporiZed schrieb:

    Von welchem Datentyp ist ListBox2.Items(0)
    => wie ist der Ist-Zustand? Du weißt, dass ListBox2.Items(0) ein String sein soll, aber was ist es denn stattdessen? Hier eine weitere Hilfe.

    Sarah schrieb:

    Mit .Split() sollte der der String in Arrays gesplittet werden.
    Richtig, aber nicht vollständig. Der String soll gesplittet werden. Split verarbeitet also Strings. Aber was ist .Split() für sich gesehen überhaupt? Eine Zusatzaufgabe, die den Umgang mit Fachbegriffen verbessert.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Ist mit Worten auch echt schwierig zu formulieren.
    Hab im Anhang mal ein Video davon gemacht ;) Die MessageBox zeigt die Curserposition der RtB



    => wie ist der Ist-Zustand? Du weißt, dass ListBox2.Items(0) ein String sein soll, aber was ist es denn stattdessen? ...

    ... so... jetzt bin ich raus :thumbsup:
    ... werd mir in der Mittagspause deinen Hilfe-Link mal durchlesen.
    Dateien
    • TaskPro.zip

      (1,28 MB, 14 mal heruntergeladen, zuletzt: )
    Hehehe, das Video* war tatsächlich hilfreich, um dem Problem näher zu kommen. Wir beide arbeiten anders. Ich arbeite fast immer mit Vollbildprozessen. Daher muss ich meine VB-App in der Taskleiste auswählen, um wieder zurück zur RTB zu kommen. Du hingegen klickst von der g**gle-Seite direkt wieder in Deine RTB. Dadurch ändert sich nicht die Caret-Position, aber das RTB-Click-Event wird ausgelöst. Du musst eine andere Stelle in Deiner App anklicken. Danach erst wieder in die RTB. Oder mit einem kleinen Trick:

    VB.NET-Quellcode

    1. 'klassenweit deklarieren, also nach Public Class Form1
    2. Private DoNotProcess As Boolean = False
    3. Private Sub Form1_Deactivate(sender As Object, e As EventArgs) Handles Me.Deactivate
    4. DoNotProcess = True
    5. End Sub
    6. Private Sub RichTextBox1_Click(sender As Object, e As EventArgs) Handles RichTextBox1.Click
    7. If DoNotProcess Then DoNotProcess = False : Return
    8. 'restlicher Code


    * nächstes Mal am besten ohne Ton aufnehmen, spart Größe.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Mega!!!!!! :thumbsup:

    DANKE Dir!

    Dann schau ich mal, dass ich noch die ListBox hinkriege, dann läuft es langsam!



    NACHTRAG:
    Richtig, aber nicht vollständig. Der String soll gesplittet werden. Split verarbeitet also Strings. Aber was ist .Split() für sich gesehen überhaupt? Eine Zusatzaufgabe, die den Umgang mit Fachbegriffen verbessert.

    So... Mittagspause ist vorbei... viel gelesen und viel angehört.
    Hab nicht alles ganz verstanden. Aber mein Code funktioniert :thumbsup:
    Manchmal kommt halt erst Try&Error bevor man es irgendwann versteht :whistling:

    VB.NET-Quellcode

    1. ElseIf TextBox5.Text = "Bearbeiten Aktiv" Then
    2. 'Projektdatei anlegen, wenn nicht vorhanden:
    3. Dim DatenbankDatei As String = Progpfad & "Daten\Projekte\" & Abteilung & "_" & Bereich & ".csv"
    4. If Not System.IO.File.Exists(DatenbankDatei) Then
    5. File.WriteAllText(DatenbankDatei, "")
    6. End If
    7. Dim strText As String = ""
    8. ListBox2.Items.Clear()
    9. For Each strZeile As String In System.IO.File.ReadAllLines(DatenbankDatei, System.Text.Encoding.GetEncoding("Windows-1252"))
    10. ListBox2.Items.Add(strZeile)
    11. Next
    12. For i = 0 To ListBox2.Items.Count - 1
    13. Dim ArrayText() As String = Split(CType(ListBox2.Items(i), String), str) '#### GEÄNDERT
    14. 'Wenn ID gefunden, dann diese Zeile durch die Neue ersetzen
    15. If ArrayText(0) = TextBox4.Text Then
    16. ListBox2.Items(i) = TextBox4.Text & str & TextBox3.Text & str & ComboBox1.Text & str & DateTimePicker1.Value & str
    17. End If
    18. Next
    19. 'Datenbank überschreiben
    20. Dim writer As IO.StreamWriter = New IO.StreamWriter(DatenbankDatei, False, System.Text.Encoding.GetEncoding("Windows-1252"))
    21. For i = 0 To ListBox2.Items.Count - 1
    22. writer.WriteLine(ListBox2.Items(i))
    23. Next
    24. writer.Close()
    25. letzter_ID = TextBox4.Text
    26. MessageBox.Show("Projekt wurde geändert")
    27. End If


    Die Ergänzungen mit CTYPE & Co. seit dem "Strict On" versteh ich nicht ganz. Das macht für mich einige Zeilen eher unverständlich ?(

    Egal... ich freu mich jetzt erstmal wie Bolle!
    Danke @VaporiZed für Deine Hilfe!

    Griaßle Sarah

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Sarah“ ()

    8|
    Leider Verschlimmbesserung:

    VB.NET-Quellcode

    1. Dim ArrayText() As String = Split(CType(ListBox2.Items(i), String), str) '#### GEÄNDERT

    Du hast aus einem .Split() ein Split() (ohne Punkt am Anfang) gemacht. Das ist nun trotz des scheinbar gleichen Wortlauts was anderes, vergleiche dazu nochmal Post#6, Zeile#17. Das geht aber auch nur deshalb, weil Du den VB6-Namespace noch drin hast. Hinfort damit! ;)
    Das Gecaste (= Anweisung an den Compiler: "Versuche dieses Objekt in diesen Typ umzuwandeln") ist etwas Overkill. Mach statt CType(ListBox2.Items(i), String) einfach: ListBox2.Items(i).ToString. Stellt sich wieder die bohrende Frage: Was ist ListBox2.Items(i) vom Typ her, dass Du es nun in einen String umwandeln musst? Denn ein String ist es ja offenischtlich nicht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Neu

    Guten Morgen @VaporiZed

    Ok, dann ist dieses CType gedöns noch aus VB6? Das .ToString ist zumindest als Anfänger auch verständlicher.

    Dann mal zurück zu der bohrenden Frage ;)

    Also soweit ich das nun verstehe.... In meiner Listbox habe ich Objekte -> die Items. Definiert werden die Items mit einem Zähler (i). Als Inhalt gebe ich dem Item einen Text - und deshalb brauche ich die Umwandlung zum String, oder?

    Griaßle Sarah

    Neu

    CType ist nicht VB6. Aber eine sehr allgemeine Typumwandlungsfunktion. Nutze ich nur, wenn ich keine andere Wahl hab. Kommt bisher in meinen Apps m.E. noch gar nicht vor.

    Sarah schrieb:

    In meiner Listbox habe ich Objekte
    :thumbsup:
    Da die ListBox alles Mögliche aufnehmen kann, sind die Items explizit nur als Object deklariert. Will man deren String-Repräsentation, also das, was zur Laufzeit in der ListBox zu lesen ist, kommt man da per .ToString ran. Hat man da komplexe Objekte in die ListBox geschoben, erhält man meist nur den Typ-/Klassennamen der Objekte - es sei denn, man kümmert sich um eine andere "Vertextlichung". Denn letztenendes wird für die Anzeige vom Compiler auch nur .ToString aufgerufen, solange ihm nix anderes gesagt wird.

    Sarah schrieb:

    Definiert werden die Items mit einem Zähler (i).
    "Definiert" ist da das falsche Wort. Items an sich ist erstmal die in der ListBox vorhandene Object-/Item-Ansammlung. Um da ein einzelnes Element zu erhalten, nimmt man die Indexvariable her. Man kann also mit einer Schleife und der Indexvariable durch die Elemente durchgehen, "iterieren". Wahrscheinlich meintest und wusstest Du das auch.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Neu

    N bisken mit den Farben und Formen rumgespielt und WinForms kann auch ganz nett aussehen. Schau mal bei den von @dive26 erstellten Threads rein, z.B. hier oder hier, da bekommst Du einen weiteren Eindruck, was mit WinForms möglich ist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Neu

    Guten Morgen Zusammen,

    @r0tzi wie Flori schon gesagt hat, verwende ich Forms... und wie VaporiZed sagt, kann man auch damit "nette" Sachen machen ;)

    Man kann allesrein funktionell gestalten oder man setzt halt noch ne Stunde auf die Optik. Ich lehn mich mal etwas aus dem Fenster und würd mal sagen Mädchen halt :P

    Griaßle