Combobox Auswahl in ini festlegen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von Noim.

    Wie gesagt: Dein Code-Stil ist grauenhaft - ich blick da nicht durch. Du sagst, wenn du auf "Übernehmen" klickst, aber im Code findet sich überhaupt nix mit "Übernehmen" - da gibts nur Button1 - 4.
    Gib deinen Controls sprechende Namen, dann versteht man den Code besser.

    Aber das ist nur das eine.
    Ebensowichtig ist Visual Studio - Empfohlene Einstellungen - aber scheint dir ja am A... vorbei zu gehen.

    ErfinderDesRades schrieb:

    Wie gesagt: Dein Code-Stil ist grauenhaft - ich blick da nicht durch. Du sagst, wenn du auf "Übernehmen" klickst, aber im Code findet sich überhaupt nix mit "Übernehmen" - da gibts nur Button1 - 4.
    Gib deinen Controls sprechende Namen, dann versteht…


    Mir geht es nicht am A.. vorbei, ich habe es nur nicht wirklich verstanden.

    Und hier mal alles in benannt:
    Spoiler anzeigen


    VB.NET-Quellcode

    1. Imports INILib
    2. Public Class Einstellungen
    3. Dim ifFile As New IniFile()
    4. Dim ip As String
    5. Dim port As String
    6. Dim ob2() As String
    7. Dim password As String
    8. Dim prog As Boolean
    9. Dim debug As String
    10. Dim check As String
    11. Private Sub Einstellungen_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    12. ifFile.LoadFile("settings.ini")
    13. Dim ipc() As String = ifFile.GetKey("Settings", "ip").ToString.Split("=")
    14. ip = ipc(1)
    15. TextBox1.Text = ip
    16. Dim portc() As String = ifFile.GetKey("Settings", "port").ToString.Split("=")
    17. port = portc(1)
    18. TextBox2.Text = port
    19. Dim passwordc() As String = ifFile.GetKey("Settings", "password").ToString.Split("=")
    20. password = passwordc(1)
    21. TextBox3.Text = password
    22. Dim debugc() As String = ifFile.GetKey("Settings", "debug").ToString.Split("=")
    23. debug = debugc(1)
    24. Dim checkc() As String = ifFile.GetKey("Settings", "auto-refresh").ToString.Split("=")
    25. check = checkc(1)
    26. CheckedListBox1.Items.Add("Debug")
    27. CheckedListBox1.Items.Add("Auto-Refresh")
    28. If debug.Contains("true") Then
    29. CheckedListBox1.SetItemCheckState(0, CheckState.Checked)
    30. End If
    31. If check.Contains("true") Then
    32. CheckedListBox1.SetItemCheckState(1, CheckState.Checked)
    33. End If
    34. Dim ob() As String = ifFile.GetKey("Objecte", "objecte").ToString.Split("=")
    35. ob2 = ob(1).Split(",")
    36. ListBoxObjects.Items.AddRange(ob2)
    37. End Sub
    38. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles ÜbernehmenCheckList.Click
    39. If CheckedListBox1.GetItemCheckState(0) = CheckState.Checked Then
    40. ifFile.SetValue("Settings", "debug", "true")
    41. ElseIf CheckedListBox1.GetItemCheckState(0) = CheckState.Unchecked Then
    42. ifFile.SetValue("Settings", "debug", "false")
    43. End If
    44. If CheckedListBox1.GetItemCheckState(1) = CheckState.Checked Then
    45. ifFile.SetValue("Settings", "auto-refresh", "true")
    46. ElseIf CheckedListBox1.GetItemCheckState(1) = CheckState.Unchecked Then
    47. ifFile.SetValue("Settings", "auto-refresh", "false")
    48. End If
    49. ifFile.Save("settings.ini")
    50. Dim oForm As Form1
    51. oForm = New Form1()
    52. oForm.Show()
    53. oForm.Refresh()
    54. Me.Hide()
    55. End Sub
    56. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles ÜbernehmenIPUndDenAnderenScheiß.Click
    57. Dim section As IniFileSection = ifFile.CreateSection("Settings")
    58. ifFile.SetValue("Settings", "ip", TextBox1.Text)
    59. ifFile.SetValue("Settings", "port", TextBox2.Text)
    60. ifFile.SetValue("Settings", "password", TextBox3.Text)
    61. ifFile.Save("settings.ini")
    62. Dim oForm As Form1
    63. oForm = New Form1()
    64. oForm.Show()
    65. oForm.Refresh()
    66. Me.Hide()
    67. End Sub
    68. Private Sub Einstellungen_Closing(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    69. Dim oForm As Form1
    70. oForm = New Form1()
    71. oForm.Show()
    72. Me.Hide()
    73. End Sub
    74. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Hinzufügen.Click
    75. Dim oForm As Add
    76. oForm = New Add()
    77. oForm.Show()
    78. Me.Hide()
    79. End Sub
    80. Private Sub Button5_Click(sender As Object, e As EventArgs) Handles ÜbernehmenObjects.Click
    81. ifFile.SetValue("Objecte", "objecte", String.Join(",", ListBoxObjects.Items.Cast(Of String)))
    82. ifFile.Save("settings.ini")
    83. Dim oForm As Form1
    84. oForm = New Form1()
    85. oForm.Refresh()
    86. oForm.Show()
    87. Me.Hide()
    88. End Sub
    89. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Entfernen.Click
    90. ListBoxObjects.Items.Remove(ListBoxObjects.SelectedItem)
    91. Me.Refresh()
    92. End Sub
    93. End Class

    VB.NET-Quellcode

    1. Public Class Add
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles HinzufügenAddForm.Click
    3. Dim oForm As Einstellungen
    4. oForm = New Einstellungen()
    5. oForm.Show()
    6. oForm.ListBoxObjects.Items.Add(TextBox.Text)
    7. Me.Hide()
    8. End Sub
    9. End Class


    Okay, DAS ist grausam. Machs anders: Du rufst die AddForm mit .ShowDialog auf und gibst ihr eine Property, in dem Fall reicht eine Property ItemText As String.
    In der Form selbst setzt du dann diese Property, und dann schließt du die Form wieder, NICHT mit Me.Hide, sondern mit .Close. In der MainForm machst du dann folgendes:

    C#-Quellcode

    1. var addFrm = new AddItemForm();
    2. if (addFrm.ShowDialog() == DialogResult.OK) {
    3. // Hier kannste die Daten mit addFrm.ItemText abrufen und der ListBox adden
    4. }


    Das ist C#, kannst du aber nach VB umschreiben, die Keywords sind genau die gleichen ;)
    Und mach mal jedes Me.Hide raus.

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

    Noim schrieb:

    Mir geht es nicht am A.. vorbei, ich habe es nur nicht wirklich verstanden.
    Ah - das alte Kommunikations-Problem: Extrem viele ignorieren Inhalte, die sie nicht verstehen.
    Anstatt nachzufragen.
    Dabei sind das genau die allerwichtigsten Inhalte, das ist nämlich, was sie lernen müssen.

    Und was macht das auf mich fürn Eindruck? Natürlich, dass, was ich dir erzähle dir am A... vorbei geht.
    Weil kommt kein Kommentar zu, und am Code seh ich, ist auch nix von umgesetzt.

    Immerhin haben wir nun herausgefunden, dass du iwas nicht verstehst an Visual Studio - Empfohlene Einstellungen
    Das kann gut sein, denn die Begründungen sieht man nur ein, wenn man minimal was versteht vom Programmieren, wenn man Datentypen voneinander unterscheiden kann, und wenn man weiß, was eine Objekt-Methode ist.

    Also einfach mal machen, was da empfohlen ist. Es ist ja eine Anleitung, der man nur zu folgen braucht.

    Oder steig um auf c#, da musst du nix umstellen, damit die Programmiersprache den OOP-Prinzipien entspricht, sondern den Anti-OOP-Quatsch gibts da von vornherein nicht.

    Einfach mal machen, dann hast du sofort zig Fehlermeldungen - alles Meldungen zu Punkten, wo dein Proggi unsauber ist. Also die Fehler waren schon vorher da, nur jetzt nimmt der Compiler sie auch ernst.
    Und das hilft dir enorm beim programmieren lernen, bzw. ermöglicht es erst.

    ErfinderDesRades schrieb:

    Zitat von Noim: „Mir geht es nicht am A.. vorbei, ich habe es nur nicht wirklich verstanden.“Ah - das alte Kommunikations-Problem: Extrem viele ignorieren Inhalte, die sie nicht verstehen.
    Anstatt nachzufragen.
    Dabei sind das genau die…


    Ich komme von Java, und habe erst Heiligabend Angefangen mit VB zu Programmieren. Für mich war es erstmal wichtiger etwas hinzukriegen. Ich hatte auch vor auf C# umzusteigen, da das vom Gefühl her eher wie Java ist. Das Programm ist eine Erweiterung für das Programm Homeputer (Kennt wahrscheinlich niemand). Ich sende über Telnet an das Programm Befehle wie ist die Lampe an oder mach die Lampe aus. Homputer sendet das dann an ein anderes selbstgeschriebendes Programm vom Vorbesitzer des Hauses das dies an ein kleines Gerät im Haus sendet was über ein Bus System alle Sachen im Haus wie Steckdosen an und ausschalten kann. Wenn ich euch den Sourcecode von dem Programm des Vorbesitzers Zeigen würde, würdet ihr zusammen klappen. Der hat ohne Sinn und verstand gearbeitet. Es Funktioniert aber, ist in VB 6.0 geschrieben was ein Problem ist, da wir auf Windows Server umgestiegen sind und es dort ja kein VB 6 gibt, was wir dann über einen nicht offizielle Quelle installieren mussten. Warte warum erzähle ich das. Keine Ahnung. Ich würde gerne das Programm vom Vorbesitzer in .Net umschreiben, aber im ernst, das wäre soviel Arbeit.
    Egal...
    Ich werde mal heute kucken was mit den Empfohlenen Settings gemeint ist. Z.B habe ich nicht verstanden was mir das:

    VB.NET-Quellcode

    1. Option Strict Off
    2. Imports Microsoft.VisualBasic

    bringen soll. Im Grunde ändert das ja nicht wirklich etwas oder ?

    Und ist damit gemeint das ich nicht mehr einfach die Sachen so dahin schreiben soll, sondern, ich weiß nicht wie ich es ausdrücke soll, den so zu sagen Vollständigen Pfad woher etwas kommt oder was.

    <span data-bbcode="quote" class="">Combobox Auswahl in ini festlegen</span>

    Also irgendetwas mache ich Falsch.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict Off
    2. Imports INILib
    3. Imports Microsoft.VisualBasic
    4. Public Class Einstellungen
    5. Dim ifFile As New IniFile()
    6. Dim ip As String
    7. Dim port As String
    8. Dim ob2() As String
    9. Dim password As String
    10. Dim prog As Boolean
    11. Dim debug As String
    12. Dim check As String
    13. Private Sub Einstellungen_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    14. ifFile.LoadFile("settings.ini")
    15. Dim ipc() As String = ifFile.GetKey("Settings", "ip").ToString.Split("=")
    16. ip = ipc(1)
    17. TextBox1.Text = ip
    18. Dim portc() As String = ifFile.GetKey("Settings", "port").ToString.Split("=")
    19. port = portc(1)
    20. TextBox2.Text = port
    21. Dim passwordc() As String = ifFile.GetKey("Settings", "password").ToString.Split("=")
    22. password = passwordc(1)
    23. TextBox3.Text = password
    24. Dim debugc() As String = ifFile.GetKey("Settings", "debug").ToString.Split("=")
    25. debug = debugc(1)
    26. Dim checkc() As String = ifFile.GetKey("Settings", "auto-refresh").ToString.Split("=")
    27. check = checkc(1)
    28. CheckedListBox1.Items.Add("Debug")
    29. CheckedListBox1.Items.Add("Auto-Refresh")
    30. If debug.Contains("true") Then
    31. CheckedListBox1.SetItemCheckState(0, CheckState.Checked)
    32. End If
    33. If check.Contains("true") Then
    34. CheckedListBox1.SetItemCheckState(1, CheckState.Checked)
    35. End If
    36. Dim ob() As String = ifFile.GetKey("Objecte", "objecte").ToString.Split("=")
    37. ob2 = ob(1).Split(",")
    38. ListBoxObjects.Items.AddRange(ob2)
    39. End Sub
    40. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles ÜbernehmenCheckList.Click
    41. If CheckedListBox1.GetItemCheckState(0) = CheckState.Checked Then
    42. ifFile.SetValue("Settings", "debug", "true")
    43. ElseIf CheckedListBox1.GetItemCheckState(0) = CheckState.Unchecked Then
    44. ifFile.SetValue("Settings", "debug", "false")
    45. End If
    46. If CheckedListBox1.GetItemCheckState(1) = CheckState.Checked Then
    47. ifFile.SetValue("Settings", "auto-refresh", "true")
    48. ElseIf CheckedListBox1.GetItemCheckState(1) = CheckState.Unchecked Then
    49. ifFile.SetValue("Settings", "auto-refresh", "false")
    50. End If
    51. ifFile.Save("settings.ini")
    52. Dim oForm As Form1
    53. oForm = New Form1()
    54. oForm.Show()
    55. oForm.Refresh()
    56. Me.Hide()
    57. End Sub
    58. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles ÜbernehmenIPUndDenAnderenScheiß.Click
    59. Dim section As IniFileSection = ifFile.CreateSection("Settings")
    60. ifFile.SetValue("Settings", "ip", TextBox1.Text)
    61. ifFile.SetValue("Settings", "port", TextBox2.Text)
    62. ifFile.SetValue("Settings", "password", TextBox3.Text)
    63. ifFile.Save("settings.ini")
    64. Dim oForm As Form1
    65. oForm = New Form1()
    66. oForm.Show()
    67. oForm.Refresh()
    68. Me.Hide()
    69. End Sub
    70. Private Sub Einstellungen_Closing(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    71. Dim oForm As Form1
    72. oForm = New Form1()
    73. oForm.Show()
    74. Me.Hide()
    75. End Sub
    76. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Hinzufügen.Click
    77. Dim addFrm = New Add()
    78. ' Hier kannste die Daten mit addFrm.ItemText abrufen und der ListBox adden
    79. ListBoxObjects.Items.Add(addFrm.TextBox.Text)
    80. If addFrm.ShowDialog() = DialogResult.OK Then
    81. End If
    82. 'Dim oForm As Add
    83. 'oForm = New Add()
    84. 'oForm.Show()
    85. 'Me.Hide()
    86. End Sub
    87. Private Sub Button5_Click(sender As Object, e As EventArgs) Handles ÜbernehmenObjects.Click
    88. ifFile.SetValue("Objecte", "objecte", String.Join(",", ListBoxObjects.Items.Cast(Of String)))
    89. ifFile.Save("settings.ini")
    90. Dim oForm As Form1
    91. oForm = New Form1()
    92. oForm.Refresh()
    93. oForm.Show()
    94. Me.Hide()
    95. End Sub
    96. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Entfernen.Click
    97. ListBoxObjects.Items.Remove(ListBoxObjects.SelectedItem)
    98. Me.Refresh()
    99. End Sub
    100. End Class


    VB.NET-Quellcode

    1. Public Class Add
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles HinzufügenAddForm.Click
    3. 'Dim oForm As Einstellungen
    4. 'oForm = New Einstellungen()
    5. 'oForm.Show()
    6. 'oForm.ListBoxObjects.Items.Add(TextBox.Text)
    7. 'Me.Hide()
    8. Me.Close()
    9. End Sub
    10. End Class


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

    vielleicht hast du was übersehen?

    Was du zitierst ist ja erst der 3. Schritt.
    Zuvor wäre ja das Video von xssSpacey nachzumachen, und in den Projekteinstellungen den Schrott abzustellen.

    Wenn sich dann zuviele Fehler zeigen, als dass man sie sich in einem Arbeitsschritt korrigieren könnte, erst dann führt man den Schrott Datei-weise wieder ein - der von dir zitierte Schritt.
    Wo ich das empfehle, da hab ich das aber doch auch erklärt, warum: Nämlich damit man nun datei-weise es wieder entfernen kann, und so nur die Fehler jeweils einer Datei zu beheben hat.

    Weil ein größeres Projekt mit mw. 5 Dateien, da zeigen sich leicht > 100 Fehler, das ist entmutigend, und ausserdem kann man die Korrekturen erst testen, wenn alle Stellen korrigiert sind, und bei Änderung an 100 Stellen - ohne zwischenzeitlichem Testlauf hat man leicht andere Fehler wieder eingebaut.

    Nun klarer?



    Übrigens vielen Dank für die Infos zu deim Background.
    Normal, wenn ein Code-Problem zu beschreiben ist, will ich solch garnet wissen, aber zum Thema Kommunikation selbst scheint mir das iwie doch hilfreich - weißauchnet warum.



    Zum Umschreiben eines vb6-Programms: Das wär tatsächlich keine schlechte Entscheidung, es nicht nach vb.net zu portieren, sondern nach c#.

    Kein Mensch begreift anfangs, dass vb.net eine total andere Sprache ist als vb6, also vb.net ist von vb6 genauso weit entfernt wie es c# ist.

    Die Ähnlichkeiten sind nur scheinbar, und das ist verheerend, denn verleitet, im vb.net-Context dennoch vb6 zu coden statt vb.net - wie's sich gehören täte.

    Weil leider ist es in vb.net möglich, manche vb6-Vorgehensweisen zu reproduzieren (vor allem, wenn man die "Deppen-Einstellungen", mit denen vb.net ausgeliefert wird, nicht korrigiert).
    Aber die vb6-Vorgehensweisen sind in keinem Fall wirklich notwendig, und besser wäre, sich gleich in die jeweils vorgesehenen vb.net-Vorgehensweisen einzuarbeiten.
    Und von den 100% unnötigen Fällen ist nur 1% zumindest gleichwertig zu vb.net, 99% sind nicht nur unnötig, sondern definitiv und in jedem Einzelfall sachlich begründbar schlechter.

    ErfinderDesRades schrieb:

    vielleicht hast du was übersehen?

    Was du zitierst ist ja erst der 3. Schritt.
    Zuvor wäre ja das Video von xssSpacey nachzumachen, und in den Projekteinstellungen den Schrott abzustellen.

    Wenn sich dann zuviele Fehler zeigen, als dass man sie sich in…


    Ok ich habe jetzt in den VS Einstellungen Option Strict auf On gesetzt. Aber ich hatte jetzt keine wirklich Veränderung. Oder muss ich auch noch andere Sachen ändern. Wahrscheinlich oder ? Es kommen keine Fehler und das Programm Funktioniert bis auf den Fehler den ich beschrieben habe noch immer. Ach und es tut sich doch etwas, er fügt doch Sachen in die ListBox hinzu, undzwar "", also nichts, und das setzt er dann auch in die INI Datei. Das ist fatal, wenn man dann wieder das Programm startet, stürtzt es ab, weshalb ich unbedingt noch einbauen will das er an der Stelle:

    VB.NET-Quellcode

    1. Dim ob() As String = ifFile.GetKey("Objecte", "objecte").ToString.Split("=")
    2. ob2 = ob(1).Split(",")
    3. ComboBox1.Items.AddRange(ob2)
    4. ComboBox1.SelectedIndex = ComboBox1.Items.Count - 1

    jeden String der "" ist, entfernt. Habe es schon versucht, doch irgendwie klappt das nicht so wie ich will. Und dann ist halt noch immer das Problem das er nichts hinzufügt.
    Ich schließe das Thema mal, da ich mich jetzt entschieden habe das Programm in C# neu zu schreiben. Und diesmal ohne INI sondern mit einem Data Set (Jetzt muss ich nur noch herausfinden wie das geht xD das Video vom Freundlich wirkenden Inder hat mir nicht geholfen :D)
    ein freundlich wirkender Inder? hastemal einen Link?

    Ansonsten kann ich dich noch mit .net-Lern-Pensum vollballern: Datenverarbeitungs-Vorraussetzungen

    Es ist in c# dasselbe Pensum wie in vb.net, nur die Deppen-Einstellungen bleiben einem erspart.
    Gucks dir an, denn wie Visualstudio tickt, was inhaltlich ein gutes Buch ausmacht, Layout, zusammenbinden von Solutions, Datenmodellierung, Databinding - ist alles dasselbe auch in c#

    ErfinderDesRades schrieb:

    ein freundlich wirkender Inder? hastemal einen Link?

    Ansonsten kann ich dich noch mit .net-Lern-Pensum vollballern: Datenverarbeitungs-Vorraussetzungen

    Es ist in c# dasselbe Pensum wie in vb.net, nur die Deppen-Einstellungen bleiben einem erspart.
    Gucks dir an, denn wie Visualstudio tickt, was inhaltlich ein gutes Buch ausmacht, Layout, zusammenbinden von Solutions, Datenmodellierung, Databinding - ist alles dasselbe auch in c#


    Du scheinst echt hier der Spezialist für alles zu sein :D Ich habe einen neues Thema im Forum dafür jetzt eröffnet, dieses wurde immer unübersichtlicher und ist vom Thema abgekommen.

    Also für mich hat er sich extrem nach einem Inder angehört: