vb.net - stringbuilder

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von susanne.

    vb.net - stringbuilder

    Ein liebes hallo,

    ich bin absolute anfängerin und komme mit programmieren überhaupt nicht zurecht. Ich möchte in einem geographischen programm (arcgis) - in dem mehrere layer (karten) geladen wurden - diese in einer message box darstellen. Dazu soll ich den string builder verwenden. Nur weiß ich nicht, wie ich den in den code einbauen muss, damit es auch funktioniert. Kann mir da jemand bitte helfen?

    Lieben dank im voraus!!

    code:

    VB.NET-Quellcode

    1. Imports ESRI.ArcGIS.Geodatabase
    2. Imports ESRI.ArcGIS.Carto
    3. Imports ESRI.ArcGIS.ArcMapUI
    4. Imports System.Text
    5. Public Class LayerLoop2_Button1
    6. Inherits ESRI.ArcGIS.Desktop.AddIns.Button
    7. Public Sub New()
    8. End Sub
    9. Protected Overrides Sub OnClick()
    10. AccessLayerViaMxDocument(My.ArcMap.Document)
    11. My.ArcMap.Application.CurrentTool = Nothing
    12. End Sub
    13. Shared Sub AccessLayerViaMxDocument(ByVal pMxDocument As IMxDocument)
    14. Dim pMap As IMap
    15. Dim pMaps As IMaps = pMxDocument.Maps
    16. Dim i As Integer
    17. For i = 0 To pMaps.Count - 1 Step i + 1
    18. pMap = pMaps.Item(i)
    19. Debug.WriteLine(pMap.Name)
    20. MsgBox(pMap.Name)
    21. Dim pEnumLayer As IEnumLayer = pMap.Layers(Nothing, True)
    22. pEnumLayer.Reset()
    23. Dim pLayer As ILayer = pEnumLayer.Next()
    24. Dim sb As System.Text.StringBuilder = New System.Text.StringBuilder()
    25. While Not pLayer Is Nothing
    26. Debug.WriteLine(pLayer.Name)
    27. pLayer = pEnumLayer.Next()
    28. sb.Append(pLayer.Name)
    29. MsgBox(sb.ToString())
    30. End While


    Edit by ~blaze~:
    *Codetags eingefügt*
    +Topic verschoben von Admin

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    so, und jetzt noch mit Einrückungen und ohne sinnlose Leerzeilen:

    VB.NET-Quellcode

    1. Imports ESRI.ArcGIS.Geodatabase
    2. Imports ESRI.ArcGIS.Carto
    3. Imports ESRI.ArcGIS.ArcMapUI
    4. Imports System.Text
    5. Public Class LayerLoop2_Button1
    6. Inherits ESRI.ArcGIS.Desktop.AddIns.Button
    7. Public Sub New()
    8. End Sub
    9. Protected Overrides Sub OnClick()
    10. AccessLayerViaMxDocument(My.ArcMap.Document)
    11. My.ArcMap.Application.CurrentTool = Nothing
    12. End Sub
    13. Shared Sub AccessLayerViaMxDocument(ByVal pMxDocument As IMxDocument)
    14. Dim pMap As IMap
    15. Dim pMaps As IMaps = pMxDocument.Maps
    16. Dim i As Integer
    17. For i = 0 To pMaps.Count - 1 Step i + 1
    18. pMap = pMaps.Item(i)
    19. Debug.WriteLine(pMap.Name)
    20. MsgBox(pMap.Name)
    21. Dim pEnumLayer As IEnumLayer = pMap.Layers(Nothing, True)
    22. pEnumLayer.Reset()
    23. Dim pLayer As ILayer = pEnumLayer.Next()
    24. Dim sb As System.Text.StringBuilder = New System.Text.StringBuilder()
    25. While Not pLayer Is Nothing
    26. Debug.WriteLine(pLayer.Name)
    27. pLayer = pEnumLayer.Next()
    28. sb.Append(pLayer.Name)
    29. MsgBox(sb.ToString())
    30. End While
    31. Next
    32. End Sub
    33. End Class
    So schön kann Code hier im Forum aussehen - gugge auch

    So, du sollst "das" in eine Messagebox einbauen?
    Im Code sehe ich aber 2 Msgbox-Aufrufe, also kannst du bischen genauer angeben, was zusammengesammelt werden soll und als Messagebox rauszuhauen ist?
    Hallo,

    und danke! Sieht wirklich gleich ganz anders aus!!!
    In der ersten messagebox soll der Name des Kartenblattes (des übergeordneten Rahmens stehen - hier mapname). Klickt man auf ok, kommt die zweite messagebox und hier sollte der string build eingebaut sein, der alle layer gemeinsam (alle die unterhalb des mapnames stehen) anzeigt. Ich habe versucht den stringbuild (sb.Append(pLayer.Name) oben bereits einzubauen, aber das funktioniert überghaupt nicht.... Vielen Dank für jede weitere Hilfe!

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

    tja, keine Ahnung, könnte sein, dasses das schon ist:

    VB.NET-Quellcode

    1. Shared Sub AccessLayerViaMxDocument(ByVal pMxDocument As IMxDocument)
    2. Dim pMap As IMap
    3. Dim pMaps As IMaps = pMxDocument.Maps
    4. Dim i As Integer
    5. For i = 0 To pMaps.Count - 1
    6. pMap = pMaps.Item(i)
    7. Debug.WriteLine(pMap.Name)
    8. MsgBox(pMap.Name)
    9. Dim pEnumLayer = pMap.Layers(Nothing, True)
    10. pEnumLayer.Reset()
    11. Dim pLayer As ILayer = pEnumLayer.Next()
    12. Dim sb = New System.Text.StringBuilder()
    13. While pLayer IsNot Nothing
    14. Debug.WriteLine(pLayer.Name)
    15. sb.Append(pLayer.Name).append(vbLf)
    16. pLayer = pEnumLayer.Next()
    17. End While
    18. MsgBox(sb.ToString())
    19. Next
    20. End Sub

    Eiglich der einzige wesentliche Fehler, dass die 2.Msgbx in der Schleife war, statt dahinter, wenn der Sammel-Prozess fertig ist.
    Und Step i + 1 geht natürlich auch garnet