Wie erstellt man ein Formular zur richtigen Berechnung von Kosten?

  • VB.NET

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

    Wie erstellt man ein Formular zur richtigen Berechnung von Kosten?

    Moin,

    Ich habe ein Problem! (Offensichtlich sonst würde ich hier wohl nichts schreiben....)

    Ich arbeite Gerade an einem Calculator für mein Unternehmen.
    Ich habe zwar einen in Exel, aber meine Mitarbeiter schaffen es immer wieder diesen zu verstellen. (idk wie)
    Leider funktioniert nur der Button "AC", dieser setzt die werte einfach nur auf die ursprünglichen werte zurück.
    Allerdings soll der Berechnungs Button funktionieren. Mir wurde gesagt ich solle die textboxen weg machen, diese möchte ich aber für erweiterngen des Programms behalten!
    Daher die Frage: Wie kann ich Dem Button sagen das er die ganzen textboxen mit einander verrechnen soll zb textbox1 * textbox2 = textbox3 und textbox3 + textbox4 = textbox5.
    Bin etwas überfragt. Bin nicht so versiert mit VB möchte es aber dennoch selbst machen.

    Danke im vorrauß und bleibt Gesund

    *Topic verschoben*
    Bilder
    • 1.png

      16,02 kB, 353×400, 244 mal angesehen
    • 2.png

      16,18 kB, 830×269, 237 mal angesehen
    • exel.jpg

      62,07 kB, 996×517, 212 mal angesehen
    Dateien
    • calc.zip

      (18,5 kB, 192 mal heruntergeladen, zuletzt: )
    =O

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „JustTex“ ()

    Willkommen im Forum.

    »Ist es möglich textboxen zusammen zu rechnen?« Nein. TextBox1 x TextBox1 ergibt TextBox1². Button1 x Button1 ergibt Button1². Ein weiterer Fall von CE-Verrechnung, die scheitert, weil man CEs nicht miteinander verrechnen kann. Du kannst aber die Inhalte versuchen miteinander zu kombinieren. Du kannst sogar versuchen, die Texte von TextBoxen in Zahlen umzuwandeln und diese zu verrechnen. Wolltest Du? Dann bitte das auch schreiben. Einige hier bekommen ganz komische Zuckungen, wenn die sowas lesen wie »Ist es möglich textboxen zusammen zu rechnen?« Inklusive mir. Und dann soll es sogar solche geben, die dann sagen: Und was passiert, wenn in der einen TextBox 3 drinsteht und in der anderen "Roulade mit Klößen"? Ergibt das dann eine Familienportion?

    Polemikmodus: off

    Wandle die TextBox-Texte in Zahlen um. Dafür gibt es z.B. Double.Parse und Double.TryParse. Dafür müssen die TextBox-Texte aber frei von Sonderzeichen wie Space oder sein.
    Sinnvoller: Werte in Double-Variablen speichern, Variablen in TextBoxen anzeigen lassen, Variablenwerte miteinander verrechnen und das Ergebnis anzeigen.

    Kannst gleich im Parallelthread Zahlen addieren sich miteinander reinschauen und da stöbern.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo @JustTex

    Ersetze alle Textboxes mit dem NumericUpDown. Die Prozentangaben und die Währung kann man in ein eigenes Label neben der NumericUpDown verlegen.

    Ach ja. Die NumericUpDown-Properties setzen
    - .Increment = 0.01m (m für Decimal)
    - .DecimalPlaces = 2

    So und von jetzt an kann das Programm mit Zahlen arbeiten. Am Besten die Inhalte jeder NUD eine eigene Variable zuweisen.


    Freundliche Grüsse

    exc-jdbi
    Hey,

    Hast du eine bessere Idee für einen Titel.

    Zu der Familien Portion. Es ist nur möglich zahlen, komma, Prozent Symbol und Euro Symbol ein zu tragen. Der Rechner soll die Gebühren vom VK abziehen und die einzelnen Werte in den textboxen anzeigen. Sprich rechnen wie in einer Excel Tabelle.

    MFG
    =O
    Du willst ein einfaches Berechnungsformular. Von daher vielleicht: »Wie erstellt man ein Formular zur richtigen Berechnung von Kosten?«

    Zur Vorgehensweise wurde ja schon anfänglich was gesagt. Die und %-Zeichen müssen gefiltert werden. Also, nicht aus dem Formular oder der Anzeige weggefiltert. Aber für eine Berechnung ist das €-Zeichen hier irrelevant. Das darf erst am Ende angezeigt werden. Besser wäre es, wenn es sogar getrennt von dem Eingabe-CE wäre, Stichwort NumericUpDown, was von @exc-jdbi schon erwähnt wurde. Das würde dazu führen, dass im Formular steht: PayPal-Käuferschutz in Euro oder PayPal-Käuferschutz [€]
    Das %-Zeichen ist auch so eine Sache. Es muss auch raus aus der TextBox. Aber der Wert muss natürlich anders in der Rechnung bearbeitet werden als ein €-Betrag. Am besten wäre es, wenn Du mal eine Formel mit allen vom User befüllbaren Werten postest, die im Taschenrechner das richtige Ergebnis bringt. Dann kann man daran sehr schön abarbeiten, welche Programm(ier)schritte nötig sind, um Dein Formular funktionstüchtig zu machen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    JustTex schrieb:

    möchte es aber dennoch selbst machen.
    Täte ich von abraten.
    Mein Vorschlag: Lass mich das machen.
    Wenn das wirklich nur ein Form ist, was die eingegebenen Zahlen zusammenrechnet, dann ist das schnell gemacht.
    Und dann hast du ein Progrämmchen, was sauber aufgesetzt und programmiert ist, und wenn du es erweitern musst, kann das auch sauber geschehen (im Gegensatz zu wenn mans erstmal krumm anfängt).

    Wenn da aber noch mehr dran hängt, dann solltest du das angestrebte Gesamtkunstwerk hier auch in nachvollziehbarer Weise erläutern.
    Das war der Sinn hinter EdRs altruistischem Angebot. Jetzt liegt's an Dir: Musst eben Dein Projekt bereinigt (außerdem ohne bin-, obj-, .vs- und .git-Ordner) und gezippt über [+ Erweiterte Antwort] hochladen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Haloo @JustTex

    Wenn es sich hier um ein grösseres Vorhaben handelt, so muss das schon erwähnt werden, weil so etwas können wir hier nicht richen.

    Am Besten ist, du stellst dir selber ein kleines Gesamtkonzept zusammen, in dem dein Vorhaben auch ein bisschen detaillierter beschrieben ist.

    Woher kommen die Daten? Werden die selber eingegeben?. All solche Fragen sollten schon mal geklärt sein.

    Sofern Zugriffe auf Datenbanken, Servern etc dazukommen, auch hier ein paar detailliertere Informationen. Des weiteren wäre sicher auch nicht schlecht sich ein paar Vorgedanken über die Erschliessung zu solchen Verbindungen zu machen. (Sobald man weiss was man will, kann diese Frage sicher detaillierter beantwortet werden)

    Wenn das Konzept steht, sich entscheiden, ob man das selber machen will, oder ob es jemand anders machen soll. Natürlich kann dir hier viel geholfen werden, jedoch wird auch viel eigeninitiative verlangt, denn ich glaube kaum, dass sich jemand hier bereit erklärt, das Ganze für dich einfach so zu schreiben. Dafür ist das Unterforum 'Marktplatz' da.

    Freundliche Grüsse

    exc-jdbi
    @exc-jdbi: Jo - das hatte ich auch gepostet, und als Bedingung meines Angebots genannt.nullDass er daraufhin sein Teil hochlädt verstehe ich so, dasses tatsächlich nix anneres ist als ein Förmchen, was ein paar Zahlen zusammenrechnen soll - ohne weitere anhängige Datenverarbeitung.
    Und das Zip - nachdem ichs repariert hab - sieht auch wirklich so aus wie so ein StandAlone-Form.

    @JustTex:
    Kann ich jetzt schon was zu sagen:
    • UserCode war in den Designer-Code gerutscht
    • Root-Namespace war: WindowsApplication1
    • Option Strict war Off
    • Microsoft.VisualBasic-Namespace war aktiviert
    Wichtigste (und für Anfänger schwierigste) Grundregel ever: Option Strict muss On, und der MVB-Namespace muss raus.
    Gugge dieses Tut: Visual Studio - Empfohlene Einstellungen

    Und die Benamung ist ganz unmöglich. Zwei Regeln schoma vorab:
    • Im Code bitte nur Namen in Acsii-Zeichen und ohne Leerzeichen
      Ich nehme an, deswegen war auch das Kuddelmuddel mittm DesignerCode, und mittm RootNamespace passiert - weil ebay - PayPal Calculator eben kein guter Name ist, den VisualStudio in jeder Beziehung korrekt handeln kann.
      Ich habs schoma einfach PayPalCalculator genannt
    • Sprechende Benamung - 15 Textboxen einfach benennen von TB1 - TB15 - das geht nicht - das löst beim Coden binnen 2h totales Chaos aus.
    Ich werd das Form eh neu machen, auch unter Verwendung von TableLayoutPanel.
    Wenn wolle, kannste schonmal diese Video-Tut zum Thema Layout angugge: Layout in Windows.Forms


    edit: ups - viel zu spät

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

    Noch ein Problem:
    Ich will Databinding verwenden.
    Dázu gibt es eine verbesserte Unterstützung ab glaub FW 4.5.2

    Von daher wäre gut, wenn du dir VisualStudio 2017 oder 2019 installieren könntest, Community Edition ist kostenlos.
    Aber wenns bei 2010 bleiben muss, dann muss ich den Code eben bischen verkomplizieren.

    Auf jeden Fall: 2010 nicht deinstallieren! Man weiss nie, was für Update-Sperenzchen Microsoft sich noch einfallen lässt - 2010 ist glaub die letzte Version, die noch dauerhaft ohne Internet auskommt.
    Wie gesagt - das funzt alles via Databinding.
    Das heisst im Form ist der BerechnungsCode nicht, sondern er ist in der DatenKlasse: DataRecord
    Die Berechnung ist grottenfalsch, aber das wirste hinbasteln können.

    Databinding ist eine Hexerei, wo man im FormDesigner Bindings einrichtet, und dann braucht man keinen Code zu schreiben, der Werte zB an Textbox1.Text zuweist, bzw von dort wieder ausliest.
    Auch sind KonvertierungsProbleme gelöst - also man kann eine Decimal-Property an eine Textbox binden, ohne dass Fehleingaben nichtnumerischer Art zum Absturz führen.

    Man kann noch jede Menge dran machen, etwa ErrorProvider dranbasteln - das sind so kleine Tooltips, die aufpoppen, wenn der User Mist eingegeben hat.

    Aber guck erstmal, wie's gefällt.

    Und wichtig: bei Fragen fragen.
    Auf Databinding stösst man als Einsteiger normalerweise erst später, und ändert dann seinen Programmierstil - weils halt deutlich besser ist. Dann hat man aber auch einiges an Vorwissen (so gott will)
    Wenn du quasi diese Anfängerphase überspringst, könnte ich mir vorstellen, dass da erhöhter Erklärungsbedarf besteht.

    Also am besten zunächst mal jede nicht-triviale Änderung kommunizieren - um nicht im Nachhinein dann doch auf Abwege zu geraten, und schlechte Gewohnheiten zu entwickeln.

    Beachte auch, wie ich das Layout gebastelt hab, und wie nett man im TLP Spalten und Zeilen-Höhen/Breiten einrichten kann, und die Controls richten sich dann ordentlich aus, ohne dass man jedes anfassen muss und mit AdlerAuge zurecht ziehen.
    Auch zu beachten den Font, den ich für Textboxen gewählt hab.

    ach - ich kann auch die Logik bischen erläutern. Also die sog. "BusinessLogic" findet inne Datenklasse statt - nicht im Form:

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Public Class DataRecord : Inherits NotifyPropertyChanged
    3. #Region "Bindable Properties"
    4. Public Property EK() As Decimal
    5. Get
    6. Return _EK
    7. End Get
    8. Set
    9. ChangePropIfDifferent(Value, _EK)
    10. End Set
    11. End Property
    12. Private _EK As Decimal
    13. '... 12 weitere Properties - alle As Decimal ...
    14. #End Region' Bindable Properties
    15. Public Sub New()
    16. AC()
    17. End Sub
    18. Friend Sub AC()
    19. 'Property-Defaultwerte setzen
    20. EK = 0 : VK = 0 : Auszahlen = 0 : BewerbProzent = 0 : EbayGebuehr = 0 : EbayGeb_Satz = 10
    21. GebuehrenGesamt = 0 : Gewinn = 0 : MwSt_Bewerb = 0 : MwSt_Satz = 19 : PayPalGebuehr_Satz = 2.49D
    22. PayPalGebuehr = 0 : PayPalKaeuferSchutz = 0.35D : VersandKosten = 0
    23. End Sub
    24. Public Sub Berechnen()
    25. GebuehrenGesamt = EbayGebuehr + PayPalGebuehr + PayPalKaeuferSchutz + BewerbungsKosten + VersandKosten
    26. Gewinn = VK - EK - GebuehrenGesamt
    27. Auszahlen = Gewinn / 2
    28. End Sub
    29. End Class
    Das DatenObjekt hat alle nötigen Properties für den logischen Vorgang - und vor allem mit dem richtigen Datentyp - nämlich hier wird nur mit Geld gerechnet, dafür gibts den Datentyp Decimal
    Die Logik ist ja banal - 2 Methoden: Rücksetzen und Ausrechnen.
    Wie gesagt: Code zum Eingeben von Werten ins DatenObjekt - bzw zum Auslesen - gibts garnet - das macht das Databinding.

    Nun das Form:

    VB.NET-Quellcode

    1. Public Class frmPayPalCalculator
    2. Private _Data As New DataRecord
    3. Private Sub FrmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. bsDataRecord.DataSource = _Data
    5. End Sub
    6. Private Sub btAC_Click(sender As Object, e As EventArgs) Handles btAC.Click
    7. _Data.AC
    8. End Sub
    9. Private Sub btBerechnen_Click(sender As Object, e As EventArgs) Handles btBerechnen.Click
    10. _Data.Berechnen()
    11. End Sub
    12. End Class
    Dassis sogar fast noch banaler. Das einzige was passiert ist, dass ein DatenObjekt erstellt wird (Mit New), und dass dieses DatenObjekt der BindingSource zugewissen wird. Die BindingSource ist im FormDesigner aufs Form gebracht worden, und an die sind alle Textboxen gebunden worden.
    Die BS ist quasi sone VErteiler-Station zwischen den vielen Properties des DatenObjekts und den vielen Controls des Forms.

    Dateien

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