in My.Resources suchen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    in My.Resources suchen

    Hallo leute,

    Ich habe einige Datein in meinen My.Resources ordner z.b. Dienst_Mo-Do_1 .... Dienst_Mo-Do_2.... Dienst_Mo-Do_4 ....usw....
    ich möchte das diese daten in meine Labels geladen werden dazu läd er es ja vom mein Resources ordner, er läd die datei in ein Bestimmten ordner und gibt die dann wieder. Das Problem ist nur ich möchte ja nicht bei jeder datei einzeln das angeben:

    VB.NET-Quellcode

    1. IO.File.WriteAllText(Application.StartupPath & "\Dokumente\Dienst_Mo-Do_1.txt", My.Resources.Dienst_Mo-Do_1)


    sondern per If die bestimmten datein ersuchen lassen, habe ich also dienst 2 ausgewählt soll er My.Resources.Dienst_Mo-Do_2 laden

    habe es momentan so:

    VB.NET-Quellcode

    1. IO.File.WriteAllText(Application.StartupPath & "\Dokumente\Dienst_" & RB_MobisDo.Text & "_" & ComboBox1.SelectedItem & ".txt", My.Resources.Dienst_ & RB_MobisDo.Text & "_" & ComboBox1.SelectedItem)


    da sagt er "Dienst_ ist kein member von My.Resources" ....

    wie kann ich es abändern das er es so übernimmt My.Resources.Dienst_ & RB_MobisDo.Text & "_" & ComboBox1.SelectedItem

    hier mal meine ganze IF funktion

    VB.NET-Quellcode

    1. If RB_MobisDo.Checked Then
    2. IO.File.WriteAllText(Application.StartupPath & "\Dokumente\Dienst_" & RB_MobisDo.Text & "_" & ComboBox1.SelectedItem & ".txt", My.Resources.Dienst_ & RB_MobisDo.Text & "_" & ComboBox1.SelectedItem)
    3. Dim line = IO.File.ReadAllText(Application.StartupPath & "\Dokumente\Dienst_" & RB_MobisDo.Text & "_" & ComboBox1.SelectedItem & ".txt")
    4. Dim v As String() = line.Split(";"c)
    5. lbl_Dienstdatum.Text = v(0)
    6. lbl_Dienstnummer.Text = v(1)
    7. lbl_Beginn.Text = v(2)
    8. lbl_Ende.Text = v(3)
    9. lbl_Dauer.Text = v(4)
    10. lbl_Hof.Text = v(5)
    11. lbl_Bezahlte_Zeit.Text = v(6)
    12. lbl_Pause.Text = v(7)
    13. lbl_Unterbrechnung_von.Text = v(8)
    14. lbl_Unterbrechung_bis.Text = v(9)
    15. lbl_VB.Text = v(10)
    16. lbl_NB.Text = v(11)
    17. lbl_hinweise.Text = v(12)
    18. lbl_Pausenzeiten.Text = v(13)
    19. lbl_Dienstvon.Text = v(14)
    20. lbl_Dienstbis.Text = v(15)
    21. lbl_LKR.Text = v(16)
    22. lbl_F.Text = v(17)
    23. ElseIf RB_Fr.Checked Then ..... und so weiter


    Danke im vorraus

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VBHunter“ ()

    VBHunter schrieb:

    My.Resources ordner
    Sind sie Mwember der Ressourcen Deines Programms?
    Vielleicht so was:

    C#-Quellcode

    1. using System.Reflection;
    2. // ...
    3. Assembly ass = Assembly.LoadFile("DEINE_EXE.exe"); // Pfad zur eigenen Assembly
    4. string[] names = ass.GetManifestResourceNames();
    5. this.listBox1.Items.AddRange(names);

    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!
    danke @RodFromGermany

    Ja ich hab sie meiner Ressource hinzugefügt ...
    wenn ich es so eingebe My.Resources.Dienst_Mo-Do_1 dann klappts ja.... aber er soll ja "Mo-Do" und "1" ersetzen durch die auswahl des Users deshalb war so ja meine idee

    VB.NET-Quellcode

    1. My.Resources.Dienst_ & RB_MobisDo.Text & "_" & ComboBox1.SelectedItem


    Ja diese C# funktion hatte ich auch kurz vorhher entdeckt aber ich bekomme das nicht in meine bedürfnisse programmiert. Da könnte ich ja auch nur den Direkten dateinamen angeben "Dienste_Mo-Do_1" statt "Dienst_ & RB_MobisDo.Text & "_" & ComboBox1.SelectedItem" oder?

    VBHunter schrieb:

    diese C# funktion
    ist eine .NET-Funktion und unter VB genau so anwendbar.
    =====
    Probier mal so was:

    C#-Quellcode

    1. Imports System.Resources
    2. Imports System.Reflection
    3. // ....
    4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    5. Dim resManager As ResourceManager = My.Resources.ResourceManager
    6. Using resReader As New ResourceReader(Assembly.GetExecutingAssembly.GetManifestResourceStream(resManager.BaseName & ".resources"))
    7. Dim id As IDictionaryEnumerator = resReader.GetEnumerator
    8. While id.MoveNext
    9. If (TypeOf id.Value Is Bitmap) Then // Hier die Typen Deiner Ressources abtesten
    10. Dim bmp As Bitmap = DirectCast(id.Value, Bitmap)
    11. PictureBox1.Image = bmp
    12. MessageBox.Show(id.Key.ToString)
    13. End If
    14. End While
    15. resReader.Close()
    16. End Using
    17. End Sub

    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!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „RodFromGermany“ ()

    wieder danke @RodFromGermany

    wie kann ich das in Text umwandeln? der Datentyp von txt ist doch sting ? .... komm mit der auflistung noch nicht ganz hinterher ?(

    VB.NET-Quellcode

    1. Dim resManager As ResourceManager = My.Resources.ResourceManager
    2. Using resReader As New ResourceReader(Assembly.GetExecutingAssembly.GetManifestResourceStream(resManager.BaseName & ".Resources"))
    3. Dim id As IDictionaryEnumerator = resReader.GetEnumerator
    4. While id.MoveNext
    5. If (TypeOf id.Value Is String) Then '// Hier die Typen Deiner Ressources abtesten
    6. 'Dim txt As String = DirectCast(id.Value, String)
    7. Dim line = IO.File.ReadAllText(Application.StartupPath & "\Dokumente\Dienst_" & RB_MobisDo.Text & "_" & ComboBox1.SelectedItem & ".txt")
    8. Dim v As String() = line.Split(";"c)
    9. lbl_Dienstdatum.Text = v(0)
    10. lbl_Dienstnummer.Text = v(1)
    11. lbl_Beginn.Text = v(2)
    12. lbl_Ende.Text = v(3)
    13. lbl_Dauer.Text = v(4)
    14. lbl_Hof.Text = v(5)
    15. lbl_Bezahlte_Zeit.Text = v(6)
    16. lbl_Pause.Text = v(7)
    17. lbl_Unterbrechnung_von.Text = v(8)
    18. lbl_Unterbrechung_bis.Text = v(9)
    19. lbl_VB.Text = v(10)
    20. lbl_NB.Text = v(11)
    21. lbl_hinweise.Text = v(12)
    22. lbl_Pausenzeiten.Text = v(13)
    23. lbl_Dienstvon.Text = v(14)
    24. lbl_Dienstbis.Text = v(15)
    25. lbl_LKR.Text = v(16)
    26. lbl_F.Text = v(17)
    27. MessageBox.Show(id.Key.ToString)
    28. End If
    29. End While
    30. resReader.Close()
    31. End Using


    hab auch noch was von My.Resources.ResourceManager gelesen kann ich dies nicht anwenden um so zu überprüfen was der User eingegeben hat?

    hier mal ein kleines Bild wie mein Programm aufgebaut ist, der User wählt ein wochentag z.b. "Mo-Do" und dann die Dienstnummer z.b. "1" dann soll er die Textdatei der Resource Lesen mit den namen "Dienst_Mo-Do_1" und weißt es je seinen Label zu in diesen fall v(0) der wochentag, v(1) Dienstnummer .... usw.

    Das gleiche jetzt wenn ich Dienst 2 wählen würde nur natürlich mit anderen inhalten.

    VBHunter schrieb:

    komm mit der auflistung noch nicht ganz hinterher
    Da musst Du mal nen Haltepunkt drauf setzen und Dir den Inhalt und den Typ der Variablen ansehen. Debuggen, Fehler finden und beseitigen
    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!
    Leider bin ich mit meiner Frage noch nicht weitergekommen.

    Ich hab die Textdatei mal Testweise in mein Dokumente ordner gepackt und dann ging es ohne Probleme öffnen....

    aber ich will ja das er es aus der Resources nimmt ....
    die datei aus der Resource herrunterläd / reinläd in den Ordner Dokumente und es ja dann öffent ...

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

    @VBHunter

    Sollte wirklich nichts klappen, dann mach es mit einer Klasse. Hab noch ein Beispiel angehängt.

    Ist halt ein bisschen Schreibarbeit, und sollten sich die Resource ändern, muss es angepasst werden.
    Aber so klappt das immer.


    MyResource

    VB.NET-Quellcode

    1. Public Class MyRessourceManager
    2. Private Shared Pathdoc As String = ".\Dokument\"
    3. Public Shared Function GetDokResource(ByVal filename As String) As String
    4. Dim pathfile = Combine(Pathdoc, filename)
    5. Using sr As New StreamReader(pathfile)
    6. Return sr.ReadToEnd()
    7. End Using
    8. End Function
    9. Public Shared Function DeleteAllResource() As Boolean
    10. Dim pathfile As String
    11. Dim resource = GetAllResource()
    12. For i As Int32 = 0 To resource.Length - 1
    13. pathfile = Combine(Pathdoc, resource(i).filename)
    14. If File.Exists(pathfile) Then
    15. File.Delete(pathfile)
    16. End If
    17. Next
    18. If Directory.Exists(Pathdoc) Then
    19. Directory.Delete(Pathdoc)
    20. End If
    21. Return True
    22. End Function
    23. Public Shared Sub SaveAllResourceToHD()
    24. Dim resource = GetAllResource()
    25. For i As Int32 = 0 To resource.Length - 1
    26. SaveResource(resource(i))
    27. Next
    28. End Sub
    29. Private Shared Sub SaveResource(ByVal ri As ResourceInfo)
    30. If ri IsNot Nothing Then
    31. If Not Directory.Exists(Pathdoc) Then
    32. Directory.CreateDirectory(Pathdoc)
    33. End If
    34. Dim pathfile = Combine(Pathdoc, ri.filename)
    35. Using sw As New StreamWriter(pathfile)
    36. sw.Write(Encoding.UTF8.GetString(ri.resource))
    37. End Using
    38. End If
    39. End Sub
    40. Private Shared Function GetAllResource() As ResourceInfo()
    41. Dim res As New List(Of ResourceInfo)
    42. res.Add(Dienst_Mo_Do_1)
    43. res.Add(Dienst_Mo_Do_2)
    44. res.Add(Dienst_Mo_Do_3)
    45. res.Add(Dienst_Mo_Do_4)
    46. Return res.ToArray
    47. End Function
    48. Private Shared Function Dienst_Mo_Do_1() As ResourceInfo
    49. Return New ResourceInfo With {.filename = "Dienst_Mo_Do_1.txt", .resource = My.Resources.Dienst_Mo_Do_1}
    50. End Function
    51. Private Shared Function Dienst_Mo_Do_2() As ResourceInfo
    52. Return New ResourceInfo With {.filename = "Dienst_Mo_Do_2.txt", .resource = My.Resources.Dienst_Mo_Do_2}
    53. End Function
    54. Private Shared Function Dienst_Mo_Do_3() As ResourceInfo
    55. Return New ResourceInfo With {.filename = "Dienst_Mo_Do_3.txt", .resource = My.Resources.Dienst_Mo_Do_3}
    56. End Function
    57. Private Shared Function Dienst_Mo_Do_4() As ResourceInfo
    58. Return New ResourceInfo With {.filename = "Dienst_Mo_Do_4.txt", .resource = My.Resources.Dienst_Mo_Do_4}
    59. End Function
    60. End Class
    61. Public Class ResourceInfo
    62. Public resource() As Byte
    63. Public filename As String
    64. End Class
    Dateien
    • MyResources.zip

      (24,54 kB, 91 mal heruntergeladen, zuletzt: )
    Hi, danke @exc-jdbi super Sache nur muss ich da nicht auch in der shared Funktion die Ressourcen vorher manuell angeben? Wollte es ja als Klasse haben die dann immer den Namen überprüfen soll da es ja eigentlich immer gleich ist Dienst_Radiobuttonauswahl_Comboboxauswahl.txt
    Ein bisschen an dein Projekt muss es schon angepasst werden. Ich wollte ja nur ein Beispiel bringen.

    Du kriegst wie ich das gesehen habe die Infos aus dem Radiobutton und der Combobox. Jetzt muss du natürlich die Namen der Resourcen so anpassen, dass es eindeutig definiert ist, welche Kombination zu welcher Resource passt.

    Ich geh davon aus, dsas du mehrere Resourcendateien drin hast. Oder ist es nur eine Resourcedatei für alle?