Anfängerproblem: Speichern, Auslesen und Verarbeiten von Informationen

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

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Apop85.

    Anfängerproblem: Speichern, Auslesen und Verarbeiten von Informationen

    Guten Abend miteinander.

    Ich habe nun schon den ganzen Tag damit verbracht auf Google nach lösungen zu suchen nur habe ich nichts entsprechendes gefunden. Evtl. Weiss ich auch nicht wirklich nach welchen Begriffen ich suchen sollte ;) Daher sind auch Links zu entsprechenden Tutorials sehr willkommen.

    Ich stelle mal kurz mein Projekt vor damit ihr inetwa eine Übersicht habt was ich geplant habe.

    Ich erstelle einen Rechner der speziell für das Umrechnen von Einheiten von Gramm pro Liter zu Mol pro Liter und umgekehrt gedacht ist.
    Ich habe die Auswahl aus der Kombination folgender Einheiten:
    EingabeEinheiten1:
    g, mg, mcg, ng, pg, mol, mmol, mcmol, nmol, pmol
    EingabeEinheiten2:
    l, ml, mcl, nl, pl

    Daraus ergeben sich verschiedene Möglichkeiten wie "ng/ml", "mmol/l" usw... Die selbe Auswahl findet sich auch für die gewünschte Ausgabeeinheit.

    Soweit so gut. Ich habe es geschafft, dass er zwischen den gleichen Einheitsystemen (also solange nicht von Gramm nach Mol gerechnet wird) das Korrekte Resultat ausspuckt mithilfe eines anhand der Auswahl getroffenen Faktors berechnet wird. (Siehe Bilder&Quellcode)
    Jedoch habe ich wie ihr im QUelltext sieht noch keine Überprüfung der Eingaben. Also ob sich nur Zahlen in der Eingabe befinden.
    Der Rechner ist noch in einem sehr rohen Zustand. Anordnung und Aufteilung können sich noch ändern. Aber die Funktion stimmt soweit fehlt nur noch die DB.

    Ich denke ich habe diesen Code unnötg kompliziert geschrieben habe aber ich habe VB 2010 Express erst gestern installiert und hatte vorhier nie was damit zu tun. Die einzigen kentnisse die ich im Programme schreiben habe sind Stapelverarbeitungsprogramme (Kleine Batch programme).

    Was mir noch Fehlt ist eine implementierung einer einfachen Datenbank zur Berechnung vom Mol-System zum metrischen System.. Meine Anforderungen sind wie folgt (Meine Vorstellungen ich kenne mich ja nicht aus und weis nicht wirklich was möglich ist mit vb):
    • Muss Lokal gespeichert sein und keine Dienste benötigen / Sind Firmen PC's und ich arbeite weder in der IT noch sind sie gewillt zusätzliche Software auf ihre Rechner zu packen.
    • Keine zusätzlichen Installationen notwendig
    • Macht nichts wenn sie absolut Unsicher ist da keine wirklich wichtigen Daten darin abgelegt werden.
    • Wenn möglich mit manueller quellenangabe da die DB-Datei auf einem SMB-Server abgelegt sein wird, und sich z.t. die Laufwerksbuchstaben ändern können an anderen PC's. Jedoch sicherlich mit einer Defaulteinstellung (Source = Z:\Programme\RLC\database.???)
    • Beim vorgänger für dieses Programm welches ich als Batch programmiert habe nutzte ich eine TXT-Basierte Datenbank. Wenn irgendwie möglich würde ich gerne diese Datei weiterverwenden um so die Einträge nicht neu tätigen zu müssen.
    • Wäre super wenn ich einen Eintrag der DB auswählen könnte und anhand der Auswahl die entsprechende molare Masse (z.b. Kohlenstoff: 12.01g/mol --> Auslesen: 12.01) als Variable (Masse) verarbeitet wird.
    • Auch Super wäre wenn ich Einträge im Rechnerprogramm bearbeiten, Erstellen und löschen könnte.
      • z.B. mittels zwei Textfeldern für Name und Masse, daneben ein Speichern-Button welches den Eintrag in die DB übernimmt
      • Löschen eines Eintrags durch anwählen und Löschen-Button
      • Editieren durch ändern im Textfeld direkt?

    Beispiel: Erhalten Resultat 44.53 mg/l und müssen es für den Kunden auf mcmol/l umrechnen. Das Material ist Kohlenstoff mit einer molaren Masse von 12.01g/mol. Falls vorhanden würde ich dies in der Datenbank/Liste auswählen falls nicht einen neuen Eintrag für Kohlenstoff erstellen.
    Dies ergibt folgende Rechnung: Resultat = 44.53 / 12.01 * 1000

    Danke für eure Hilfe

    Glg Apop85

    Visual Basic-Quellcode

    1. Public Class Form1
    2. Dim Input As Decimal
    3. Dim Masse As Decimal
    4. Dim Multiplikator As Decimal
    5. Dim Answer As Decimal
    6. Dim Faktor As Decimal
    7. Dim Out2 As String
    8. Private Sub ButtonSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonSubmit.Click
    9. Multiplikator = 1
    10. Input = TextBoxInput.Text
    11. If ComboBox1.Text = "g" Then
    12. Faktor = Multiplikator * 1
    13. ElseIf ComboBox1.Text = "mg" Then
    14. Faktor = Multiplikator / 1000
    15. ElseIf ComboBox1.Text = "mcg" Then
    16. Faktor = Multiplikator / 1000000
    17. ElseIf ComboBox1.Text = "ng" Then
    18. Faktor = Multiplikator / 1000000000
    19. ElseIf ComboBox1.Text = "pg" Then
    20. Faktor = Multiplikator / 1000000000000
    21. ElseIf ComboBox1.Text = "mol" Then
    22. Faktor = Multiplikator * 1
    23. ElseIf ComboBox1.Text = "mmol" Then
    24. Faktor = Multiplikator / 1000
    25. ElseIf ComboBox1.Text = "mcmol" Then
    26. Faktor = Multiplikator / 1000000
    27. ElseIf ComboBox1.Text = "nmol" Then
    28. Faktor = Multiplikator / 1000000000
    29. ElseIf ComboBox1.Text = "pmol" Then
    30. Faktor = Multiplikator / 1000000000000
    31. End If
    32. Multiplikator = Faktor
    33. If ComboBox2.Text = "l" Then
    34. Faktor = Multiplikator * 1
    35. ElseIf ComboBox2.Text = "ml" Then
    36. Faktor = Multiplikator * 1000
    37. ElseIf ComboBox2.Text = "mcl" Then
    38. Faktor = Multiplikator * 1000000
    39. ElseIf ComboBox2.Text = "nl" Then
    40. Faktor = Multiplikator * 1000000000
    41. ElseIf ComboBox2.Text = "pl" Then
    42. Faktor = Multiplikator * 1000000000000
    43. End If
    44. Multiplikator = Faktor
    45. If ComboBox3.Text = "g" Then
    46. Faktor = Multiplikator * 1
    47. ElseIf ComboBox3.Text = "mg" Then
    48. Faktor = Multiplikator * 1000
    49. ElseIf ComboBox3.Text = "mcg" Then
    50. Faktor = Multiplikator * 1000000
    51. ElseIf ComboBox3.Text = "ng" Then
    52. Faktor = Multiplikator * 1000000000
    53. ElseIf ComboBox3.Text = "pg" Then
    54. Faktor = Multiplikator * 1000000000000
    55. ElseIf ComboBox3.Text = "mol" Then
    56. Faktor = Multiplikator * 1
    57. ElseIf ComboBox3.Text = "mmol" Then
    58. Faktor = Multiplikator * 1000
    59. ElseIf ComboBox3.Text = "mcmol" Then
    60. Faktor = Multiplikator * 1000000
    61. ElseIf ComboBox3.Text = "nmol" Then
    62. Faktor = Multiplikator * 1000000000
    63. ElseIf ComboBox3.Text = "pmol" Then
    64. Faktor = Multiplikator * 1000000000000
    65. End If
    66. Multiplikator = Faktor
    67. If ComboBox4.Text = "l" Then
    68. Faktor = Multiplikator * 1
    69. ElseIf ComboBox4.Text = "ml" Then
    70. Faktor = Multiplikator * 1000
    71. ElseIf ComboBox4.Text = "mcl" Then
    72. Faktor = Multiplikator * 1000000
    73. ElseIf ComboBox4.Text = "nl" Then
    74. Faktor = Multiplikator * 1000000000
    75. ElseIf ComboBox4.Text = "pl" Then
    76. Faktor = Multiplikator * 1000000000000
    77. End If
    78. Multiplikator = Faktor
    79. LabelMasse.Text = Masse
    80. Masse = 12
    81. If ComboBox1.Text = "mol" Or ComboBox1.Text = "mmol" Or ComboBox1.Text = "mcmol" Or ComboBox1.Text = "nmol" Or ComboBox1.Text = "pmol" Then
    82. If ComboBox3.Text = "mol" Or ComboBox3.Text = "mmol" Or ComboBox3.Text = "mcmol" Or ComboBox3.Text = "nmol" Or ComboBox3.Text = "pmol" Then
    83. Answer = Input * Multiplikator
    84. End If
    85. End If
    86. If ComboBox1.Text = "mol" Or ComboBox1.Text = "mmol" Or ComboBox1.Text = "mcmol" Or ComboBox1.Text = "nmol" Or ComboBox1.Text = "pmol" Then
    87. If ComboBox3.Text = "g" Or ComboBox3.Text = "mg" Or ComboBox3.Text = "mcg" Or ComboBox3.Text = "ng" Or ComboBox3.Text = "pg" Then
    88. Answer = Input * Masse * Multiplikator
    89. End If
    90. End If
    91. If ComboBox1.Text = "g" Or ComboBox1.Text = "mg" Or ComboBox1.Text = "mcg" Or ComboBox1.Text = "ng" Or ComboBox1.Text = "pg" Then
    92. If ComboBox3.Text = "g" Or ComboBox3.Text = "mg" Or ComboBox3.Text = "mcg" Or ComboBox3.Text = "ng" Or ComboBox3.Text = "pg" Then
    93. Answer = Input * Multiplikator
    94. End If
    95. End If
    96. If ComboBox1.Text = "g" Or ComboBox1.Text = "mg" Or ComboBox1.Text = "mcg" Or ComboBox1.Text = "ng" Or ComboBox1.Text = "pg" Then
    97. If ComboBox3.Text = "mol" Or ComboBox3.Text = "mmol" Or ComboBox3.Text = "mcmol" Or ComboBox3.Text = "nmol" Or ComboBox3.Text = "pmol" Then
    98. Answer = Input / Masse * Multiplikator
    99. End If
    100. End If
    101. LabelAnswer.Text = Answer & ComboBox3.Text & "/" & ComboBox4.Text
    102. End Sub
    Bilder
    • rlc.JPG

      34,01 kB, 1.057×302, 195 mal angesehen
    • rlcerkl.JPG

      42,67 kB, 1.057×302, 318 mal angesehen

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Apop85“ ()

    für dein Problemchen brauchst du imo überhaupt keine Datenbank.
    Du kannst das im typisierten Dataset abhandeln, und ein solches kannst du auch direkt als Xml-Datei auf Platte schreiben.
    Das bewahrt dich aber nicht davor,dich mit relationaler Datenmodellierung zu befassen.
    Denn das ist das gute am typDataset: Es ist - ebenso wie richtige Datenbanken - ein relationales Datenmodell, und ein solches brauchst du für deine Problemstellung.
    Allerdings braucht man noch einige weitere Vorraussetzungen, ehe man Datenbänkerei bewältigen kann - man muss halt so einigermaßen programmieren können: Datenverarbeitungs-Vorraussetzungen
    Die Idee mit XML klingt schon mal nicht schlecht. Zumindest was ich bisher darüber gelesen habe (Falls ihr einen Link habt welcher dieses oder ein ähnliches Thema behandeln wäre ich sehr Happy ihn zu bekommen). Hardcoded wird etwas sehr umständlich da wir meist Medikamentenwerte oder Vitaminwerte umrechnen müssen. Dies sind komplexere Moleküle welche je nach Forschung jeweils durch andere Parameter abgelöst werden. Oder auch oft kommen neue Stoffe hinzu welche wir vorher noch nie berechnen mussten daher wäre eine Hardcodierung etwas umständlich da ich das ganze Periodensystem mit den enstsprechenden Massen in den Code einbetten müsste. Dies wäre zwar nicht mal so schwer, nur müsste man dann zur Umrechnung die Summenformel (für Wasser wäre dies ja H2O was die Rechnung 2x1+16=18g/mol ergeben würde) verwenden welche wir meist auch nicht auswendig können. Daher ist mir eine "Datenbank" lieber. Die kann ich ggf. ergänzen und anpassen. Ebenfalls ist so die wahrscheinlichkeit eines Fehlers durch den Benutzer geringer, da ja jede Summenformel "korrekt" ist aber nur eine Summenformel zu einem jeweilgen Stoff zugeteilt werden kann.

    Es sind eigentlich nur zwei Spalten notwendig für mein Projekt:
    Spalte1 = Stoffname
    Spalte2 = Molare Masse

    In meinem Vorgängerprogramm (Batch) habe ich dies folgendermassen gelöst:
    1. Was soll gerechnet werden? (g zu mol oder g zu mmol) --> Set rechnung = 1 oder 2
    2. Wie heisst der Stoff? --> Check ob Stoff schon in der DB vorhanden ist, falls ja dann übernehme Molare Masse falls nein --> Popup, soll Molare Masse auf Wikipedia nachgeschlagen werden? --> Set molma = MolareMasse
    3. Eingabe der umzurechnenden Werts --> Set eingabe = Textfeld
    4. Anzeige Ergebnis
    5. Falls gewünscht export nach HTML & Druck --> Bei Druck wird die Auftragsnummer noch abgefragt welche dann im Ausdruck hinterlegt wird.

    Das ganze habe ich mittels Batch und einer txt-Datei durchgeführt mit folgender Formatierung:
    Stoff1 - 1.23
    Stoff2 - 23.34
    Stoff3 - 45.12
    usw...
    Anhand des Trennstrichs konnte ich die Zeile in zwei Variablen aufsplitten und die Masse für die Berechnung verwenden.

    Da ich nach dem Konzept Try&Error am besten Lerne veruch ich mich einfach mal damit ;) Bisher habe ich es zumindest schon mal fertig gebracht einen Datensatz in eine XML zu exportieren... Muss nur noch rausfinden wie das geht dass bei einem neuen Eintrag die XML nicht überschrieben sondern ergänzt wird. Aber da komm ich schon noch drauf :)

    Visual Basic-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim settings As New XmlWriterSettings()
    3. settings.Indent = True
    4. Dim XmlWrt As XmlWriter = XmlWriter.Create("C:\test.xml", settings)
    5. With XmlWrt
    6. .WriteStartDocument()
    7. .WriteComment("XML Database.")
    8. .WriteStartElement("Data")
    9. .WriteStartElement("Material")
    10. .WriteStartElement("Name")
    11. .WriteString(TextBox1.Text.ToString())
    12. .WriteEndElement()
    13. .WriteStartElement("Masse")
    14. .WriteString(TextBox2.Text.ToString())
    15. .WriteEndElement()
    16. .WriteEndElement()
    17. .WriteEndDocument()
    18. .Close()
    19. End With
    20. End Sub

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <!--XML Database.-->
    3. <Data>
    4. <Material>
    5. <Name>Test</Name>
    6. <Masse>123.345</Masse>
    7. </Material>
    8. </Data>


    Danke schon mal für den Tip

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

    wie gesagt: Befass dich mit Datenmodellierung. Ein relationales Datenmodell ist ungefähr unbegrenzt flexibel, und ein (oder das) Periodensystem zu modellieren ist glaub eine Kleinigkeit.

    Trenn dich vom Try&Error-Konzept. In .Net gibts enorm viele Konzepte und Ansätze, auf die kann man mit Try&Error nicht kommen, sondern die muss man sich erklären lassen. Zum Beispiel das Konzept "relationale Datenmodellierung" oder "Databinding".

    Es ist schlicht ausgeschlossen, dass man da von selbst drauf kommt - andererseits ist das aber Stand der Technik, und wenn du daran vorbei-programmierst, produzierst du schlicht Crap

    Aber das gilt recht betrachtet auch für alle anneren im Link angesprochenen Lern-Inhalte, zB. ist ebenso ausgeschlossen, dass du von selbst die ganzen Trickse findest, wie du VisualStudio für dich arbeiten lassen kannst.

    Ich wundere mich, dass du anfängst dich für Xml zu interessieren - mit Xml kann man keine typisierten Datenmodelle erstellen, und sie sind auch nicht relational, und damit für die meisten Anforderungen ungeeignet.
    kann ich mir nur so erklären, dass du den weiterführenden Links nicht gefolgt bist, jedenfalls nicht allen. Weil zB die 4Views gehen sehr tief auf die Möglichkeiten von typDataset ein, und da wüsste ich jetzt auch nicht, was noch mehr Lesestoff da nun bringen sollte.

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

    Danke für deine Antworten

    Nun ich hätte gehofft dass es etwas einfacher ist bzw. eine Einfache Lösung möglich wäre. Soetwa wie beim Vorgängerprogramm. Natürlich kann man die Sprachen nicht vergleichen... Wie gesagt es darf enorm einfach sein... Sogar so einfach dass VB schon fast zu schade dazu ist ;)
    und wenn es eine 1:1 kopie der Funktionsweise des Batchprogramms ist mit der txt datei hauptsache es macht was ich will :)

    Deinen Links bin ich durchaus gefolgt nur kann man sowas nicht innert einem Tag lesen und verstehen? Es gibt nicht umsonst eine mehrjährige Ausbildung dazu... Für mich ist das alles Neuland und ich probier gerne was aus und mag das lösen von logischen Problemen daher auch Try&Error...

    Wäre es evt. einfacher die benötigte Information direkt aus Wikipedia auszulesen? Da die Angabe immer gleich aussieht z.B. "12.34 g/mol" könnte man evtl. die Daten direkt auslesen? Auf der seite nach "g/mol" suchen und die dazugehörigen Zahlen auslesen z.b.

    hier ein Beispiel: de.wikipedia.org/wiki/Methylphenidat Hier hat Methylphenidat (Ritalin) eine Molare Masse von 233.31 g/mol (Rechte Spalte)
    ui - hab ich dich verwechselt - ich dachte, wär schon mehr zeit her.
    haste recht - in einem Tag schafft man kaum den Überblick übers Pensum.

    Ich weiß jetzt nicht, was du willst, klingt grade nach Quick & Dirty, hauptsache läuft.
    Q&D ist meist eine Fehleinschätzung - man stößt sehr schnell auf Hindernisse, und dann fängt die Wurstelei an, und am Ende hat man ein Vielfaches an Aufwand getrieben, noch dazu mit einem schlechteren Ergebnis, als wenn mans gleich von Anfang an richtig gemacht hätte.

    Ich leg dir den Link wirklich ans Herz, und empfehle dir, dich drauf zu konzentrieren. Scheinbar ist er dir irgendwie widerlich, weil du suchst gradezu verzweifelt nach allen möglichen Alternativen - nur nicht so systematisch aufziehen, wie ichs nun grad vorschlage.
    Ich denke, damit verzettelst du dich nur - meinst du etwa, ein Wikipedia-Download und Analyse des gelieferten Htmls sei einfacher? im Gegenteil.

    Und ausserdem, wenn du dann die Werte schön gedownloaded hast, und als Ergebnisse aufbereitet - wie willst du sie anzeigen? Jawohl - am besten geht das mit dem Instrumentarium aus meim Link. Womit du wieder bei dem ankommst, was du so dringend zu vermeiden suchtest.
    Ich verstehe gerade das Problem nicht.
    Du hast eine einfache Formel, für die du eine Konstante pro chemisches Element brauchst. Das wäre eine Datentabelle. Dann brauchst du noch eine Tabelle mit Umrechnungsfaktoren für Gewicht. Und eine mit Umrechnungsfaktoren für mol-Einheiten.

    Die Anzeigeelementen (ComboBoxen für Einheiten-Auswahl und chemische Elemente, TextBox für die Ausgabe) werden an die entsprechenden Spalten in den Tabellen gebunden. Bzw. die Ausgabe rechnest du halt.

    Ich bin mir sicher, dass wenn du 1-2 Tage in das Lesen der Links von @ErfinderDesRades investierst (speziell, relationale Idee), du es in paar Zeilen Code programmieren kannst (mehr ist es ja nicht).
    Hallo zusammen

    @ErfinderDesRades
    Natürlich scheue ich etwas davor gleich ein Buch über Vb zu lesen. Auch beim schreiben des Batchs haben mir viele User allein schon davon abgeraten mittels Dos dieses Programm mit DB und berechnungen zu schreiben weil es die Möglichkeiten von Dos überschreitet und daher zu kompliziert sei. Dabei musste ich nur 5 Befehle verstehen um alles umsetzen zu können. Irgendwie habe ich halt noch die Hoffnung dass dies hier auch so sein könnte ;). Daher suche bzw frage ich nach alternativen. Ich denke ich könnte die variabel evt sogar mittels eines kleinen batchs downloaden und auslesen somit könnte ich die benötigte Masse in einer tmp-datei bereitstellen... (müsste jedoch zuerst probieren, natürlich sofern es einfacher wäre wenn die Masse bereits bereit stehen würde und ich eine bat datei ebenfalls in die exe einbringen kann)

    @sonne75
    Mein "Problem" ist dass ich nach einer möglichst einfachen Art Suche meine Bedürfnisse an mein Programm zu erfüllen. Der Faktor zur Umrechnung habe ich ja hardcecoded indem ich die Auswahl der Dropdownmenüs überprüfe und den Faktor entsprechend berechne (1. Beitrag Code-Zeile 13-87). Die Art der Berechnung wird ebenfalls überprüft und anhand der Auswahl die entsprechende Formel gewählt (1. Beitrag Code-Zeile 91-109). Mir fehlt nur noch eine einfache Art um die Masse der Moleküle nicht bei jeder Berechnung neu zu suchen und eingeben zu müssen. Ich werde jedoch sicher dem Link noch weiter Folgen und lesen. Da dies jedoch ein Freizeitprojekt ist habe ich dazu viel Zeit.

    Außerdem ist der Inhalt des Links auch nicht gerade für Leute die 0 Ahnung haben. Ist ja interessant zum Lesen jedoch ohne Kenntnisse der Fachbegriffe schwer zu verstehen. Darum ists auch gut dass ich Zeit habe ;)

    @All
    Ich bitte halt um etwas Geduld. Da ich VB so gut wie nicht kenne Frage ich halt nach und Bohre nach Alternativen um die Möglichkeiten mit praktisch 0 VB Kenntnissen auszulotsen. Was ich bisher gelesen und gehört habe scheint man in einer Ausbildung nicht gerade mit DB einzusteigen da es mehr Grundwissen benötigt. Daher evt auch von mir dumm gewählt beim ersten Versuch gleich mit DB zu basteln. Auch darum Frage ich nach Alternativen Möglichkeiten.

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

    Dann wäre ein Kompromiss Listen zu verwenden.
    Warum hast du eigentlich 4 Comboboxen? Ich dachte, du brauchst nur 2 für Einheiten?

    Du hast keine Option Strict On an (Projekteigenschaften->Kompilieren->Option Strict auf On), du schreibst Zahlen in die Labels (die Text erwarten, also String) usw. Mach sie an, das wird schon mal sauberer.

    Ich dachte, du wolltest du Massen auch für jedes Element schon speichern, oder sollen die User sie einfach eingeben?

    Wenn du mir gesagt hast, warum du 4 ComboBoxen hast und warum da ein Durcheinander herrscht (in jeder Combobox hast du Gramm und Mol drin), dann kann ich dir weitere Vorschläge machen.
    @sonne75
    danke für den Tip mit den listen. Werde mir das mal anschauen sobald ich dazu komme. Ich benötigte 4 comboboxen da ich eine Zahl mit einer Ursprungseinheit habe z.b. 45ng/ml für die combobox1 wähle ich "ng" und bei combobox2 "ml". Das Resultat möchte ich in mcmol/l... Diese "Zieleinheit" wähle ich durch combobox3 & 4. Anhand der Kombination zwischen den comboboxen errechne ich den benötigten faktor.
    Ich hab mir durchaus überlegt das auf zwei comboboxen zu reduzieren nur wäre die Auswahl durch die Kombinationsmöglichkeiten zu gross für ein Dropdownmenü. Durch die Auswahl der einzelnen Einheiten möchte ich einfach die Übersicht bewahren.

    @Tourguide ???
    @sonne75
    Danke für den Tip. Genau nach sowas hab ich gesucht :) Auch vom schwierigkeitsgrad her. Damit das ganze etwas schöner wird wollte ich, dass die Liste nur angezeigt wird sofern diese auch benötigt wird. Also wenn man zwischen den Einheitsystemen hin und her rechnet.

    Wie ich das umsetzen muss habe ich noch nicht verstanden. Was ich jetzt eigentlich möchte ist, dass zwischen der Überprüfung der Berechnungsform und der durchführung der Berechnung eine Pause eingelegt wird. Bzw. auf das OK auf Form2 gewartet wird. Momentan Crasht es natürlich... Es öffnet zwar Form2 jedoch ohne Pause und dann merkt er natürlich dass Masse = 0 ist und dividieren durch 0 geht ja mal gar nicht ;)

    Wie Löse ich dies?

    Visual Basic-Quellcode

    1. If ComboBox1.Text = "g" Or ComboBox1.Text = "mg" Or ComboBox1.Text = "mcg" Or ComboBox1.Text = "ng" Or ComboBox1.Text = "pg" Then
    2. If ComboBox3.Text = "mol" Or ComboBox3.Text = "mmol" Or ComboBox3.Text = "mcmol" Or ComboBox3.Text = "nmol" Or ComboBox3.Text = "pmol" Then
    3. Form2.Show()
    4. Answer = Input / Masse * Multiplikator
    5. End If
    6. End If


    Ausserdem habe ich noch mühe die Variablen zwischen den Forms zu übergeben. Soviel ich gelesen habe sollte es reichen wenn die Variablen nicht als Private Class deklariert sind sondern als Public. Die Definition der Variablen findet ja oben im Quellcode geschrieben unter Public Class Form1 Jedoch werden sie mit den Buttons berechnet welche als Private Sub gekennzeichnet ist. Liegt da das Problem oder wie übergebe ich die Variablen korrekt von Form1 nach Form2 und zurück? Ich versuche gerade anstatt einer "Pause" die Berchnung durch Form2 durchzuführen und das Resultat an Form1 zu übergeben.

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

    Ich habe mir gerade bei der Autofahrt eine einfache Lösung überlegt. Mit dem DataSet wäre es zwar schöner, aber zur Not geht es halt ohne.

    Du brauchst 2 Arrays (String und Integer). In das erste kommen die Bezeichnungen, einmal Gewicht und einmal Mol, mit verschiedenen Prefixen (mg usw). In das andere beiden kommen in der gleichen Reihenfolge (!!) die Faktoren, durch die je nach Bezeichnung geteilt werden muss (also 1, 100, 1000 usw).

    Ich weiß jetzt nicht, wozu du eine andere Form haben willst, es reicht eine.
    Code jetzt ungefähr, kann nicht testen:

    VB.NET-Quellcode

    1. Dim lstBez() As String={"mg", "kg" 'usw
    2. Dim lstFaktoren() As Integer={1000, 1 'usw}
    3. 'am Ende von LoadEvent dann
    4. cbBez1.DataSource=lstBez
    5. cbBez2.DataSource=lstBez
    6. cbBez3.DataSource=lstBez
    7. cbBez4.DataSource=lstBez
    8. 'ein NumericUpDown mit 2 Nachkommastellen zur Eingabe von Masse
    9. 'ein OK-Button
    10. 'im btOKClick-Event
    11. 'so greifst du jeweils auf die Faktoren:
    12. Dim faktor1 = lstFaktoren(cbBez1.SelectedIndex)
    13. Dim faktor2=lstFaktoren(cbBez2.SelectedIndex)
    14. 'und die anderen 2
    15. 'Dann nimmst hast du alles für die Formel, die Masse nimmst du aus nudMasse.Value, sie musst du noch zu Double konvertieren


    Das war es schon, du brauchst nichts mehr zu überprüfen, das Ergebnis gibst du in einer TextBox aus.
    @sonne75
    Danke für den Tip. werde ich noch ausprobieren.
    Müsste ich für lstFaktoren nicht "Decimal" verwenden anstatt Integer da die Faktoren zwischen 1000000000000 und 0.000000000001 variert je nach Rechnung?

    Was das Interesse an den zwei Forms ist, ist die übersicht. Wenn man im gleichen Einheitensystem rechnet ist die Molare Masse nicht notwendig da benötigt man nur den entsprechenden faktor. Da die Liste also optional ist würde ich sie gerne erst aufrufen wenn sie nötig ist.

    Daher die Frage nach dem übergeben der Variablen zwischen den Forms. Wäre einfach etwas aufgeräumter...

    EDIT:
    Das mit dem übergeben von Variablen sowie dem schreiben in anderen Forms habe ich inzwischen gelöst. Habe den Rechner mals als ZIP hochgeladen damit du siehst wie ichs meine.

    Was ich jetzt gerne noch machen würde wäre die berechnung in eine HTML zu packen um diese zu drucken. Ich hab schon danach gegoogelt jedoch nichts gefunden was mir gerade weiterhilft. Warum ich HTML wähle? So habe ich dies auch mit dem Batch-Programm gemacht da es mir so möglich war das Formular meinen Wünschen entpsrechend zu Formatieren. In dieser HTML sollten auch die Variablen vorhanden sein. Beim Batch musste man da etwas anders vorgehen als bei normalen Variablen um sie in eine HTML auszugeben, wie ist das bei VB?
    Evtl. gibt es bei VB ja noch etwas einfacheres?
    Bilder
    • mit liste.JPG

      36,9 kB, 1.061×302, 142 mal angesehen
    • ohne liste.JPG

      43,08 kB, 941×422, 147 mal angesehen
    Dateien
    • RLC.zip

      (263,98 kB, 187 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Apop85“ ()

    Glaube habe den Teil gefunden den ich gesucht habe bezüglich HTML. Leider gibt mir der Code noch Fehlermeldungen zurück die ich nicht nachvollziehen kann. Irgendwo scheint der Wurm drin zu sein nur wo?
    1. Fehler: Zeile 6 stört ihn das "/"-Symbol aber nur das zwischen ComboBox1 & 2 das zwischen 3 & 4 scheint nicht zu stören...Ausdruck erwartet
    2. Fehler: VB akzeptiert den ausdruck "End Sub" nicht in der untersten Zeile. Es scheint als würde es noch immer als HTML interpretiert?

    Habe noch nicht versucht das Programm mit den Fehlermeldungen zu starten.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim lHtmlDoc = <html>
    3. <html>
    4. <head>
    5. <title>Umrechnung <%= Stoff %> von <%= ComboBox1.Text & / & ComboBox2.Text %> zu <%= ComboBox3.Text & / & ComboBox4.Text %></title>
    6. </head>
    7. <a align="center" style="text-align:center">
    8. <h1 align="center" style="padding:0px;margin:0px">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</h1>
    9. <h1 align="center" style="padding:0px;margin:0px">Umrechnung von <%= ComboBox1.Text & / & ComboBox2.Text %> zu <%= ComboBox3.Text & / & ComboBox4.Text %></h1>
    10. <h1 align="center" style="padding:0px;margin:0px">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~</h1>
    11. <center><br>
    12. <br>
    13. <p style="padding:0px;margin:0px">Stoffname: <%= Stoff %><br></p>
    14. <p style="padding:0px;margin:0px">Molare Masse: <%= Masse %> g/mol<br></p>
    15. <p style="padding:0px;margin:0px">Externes Resultat: <%= Input %> <%= ComboBox1.Text & / & ComboBox2.Text %><br></p>
    16. usw...
    17. </center><br>
    18. <p style="text-align:center">Datum: <%=Date %> &nbsp; &nbsp; Visum:.....................<br></p>
    19. <p align="center" style="padding:0px;margin:0px">
    20. <br><center>
    21. <input align="center" type=button onclick="window.print()" value='Drucken'>
    22. </p></center></body></html>
    23. Dim lFile As String = ""
    24. lFile = print.AddExtension("html")
    25. lHtmlDoc.Save(lFile)
    26. Process.Start(lFile)
    27. End Sub

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