Format wurde nicht declariert - Umstellung auf VS 2013

  • VB.NET

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

    Format wurde nicht declariert - Umstellung auf VS 2013

    Schönen guten Tag!

    Ich bin gerade dabei ein Programm (d.h. ich möchte) ein Programm neu aufbauen und will soweit möglich, alte Formulare wiederverwenden.

    Es handelt sich um keine Datenbank.Ich habe die Version VS 2013 und - wie im Forum geraten -(Quelle) Folgendes eingestellt:
    • Microsoft.VisualBasic: Häkchen raus
    • System.IO: Häkchen: rein
    • Option Strict: ON
    • Option Explicit: ON
    Siehe auch beigefügtes Bild von den nicht verwendeten Verweisen.Nun haben viele meiner alten Formulare Label bei denen ich die Betragsanzeige mit einer Einheit ergänzt habe, z.B. mit folgendem Code:

    Visual Basic-Quellcode

    1. lblIngenieurStundensatz.Text = Format(IngenieurStundensatz, "##,##0 €/h")
    (VB 6.0 ?)

    Daraus folgt nun mit der Softwareumstellung beim Hinzufügen die Fehlermeldung bzw. es folgen die Hinweise: "Format" wurde nicht deklariert.

    Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden.Importieren Sie "System.Windows.Forms.DataFormats"
    Importieren Sie "Microsoft.SqlServer.Server".
    Ändern Sie "Format" in "DataFormats.Format".
    Ändern Sie "Format" in "Microsoft.SqlServer.Server.Format".
    Ändern Sie "Format" in "UriFormat". Ändern Sie "Format" in "Form". Ändern Sie "Format" in "Forml".
    Methodenstub für "Format" in "AbwasserExeIntern2018.frmHonorar" generieren
    Eigenschaftenstub für "Format" in "AbwasseraeIntern2018.frmHonorar" generieren

    Bei den Verweisen habe „System.Windows.Forms.DataFormats“ nicht gefunden. Allerdings gibt es bei den nichtimportierten Namespaces einige .Forms. Siehe png-Datei.

    Siehe auch „Importierte Namespaces.png“.

    (Einen derartigen Code habe ich zahlreichen Formularen.)

    Ich möchte in den Einstellungen zum Programm dies ein für alle Mal korrigieren und habe mir gedacht, bevor ich etwas „verschlimmbessere“ frage ich mal nach.

    Was ratet Ihr mir :?:


    Beste Grüße aus dem Vogtland!
    Bilder
    • Nicht verwendete Verweise.png

      29,5 kB, 1.287×260, 71 mal angesehen
    • Importierte Namespaces.png

      15,79 kB, 1.057×307, 66 mal angesehen
    Ich rate Dir dazu: Schau Dir mal z.B. Double.ToString an. Sollte wohl in die richtige Richtung gehen.

    VB.NET-Quellcode

    1. Dim Wert = 123.123123
    2. Dim TextDazu = Wert.ToString("0###.#")
    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.

    Uchi-Komi schrieb:

    VB.NET-Quellcode

    1. lblIngenieurStundensatz.Text = Format(IngenieurStundensatz, "##,##0 €/h")
    Das ist VB6-Ranz.
    Probier dies:

    VB.NET-Quellcode

    1. lblIngenieurStundensatz.Text = String.Format("{0:0.000} €/h", IngenieurStundensatz)
    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!
    Schau dir das bitte auch schnell an

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Imports System.Text
    4. Imports System.Threading
    5. Imports System.Globalization
    6. Public Module Module1
    7. Public Sub Main()
    8. Dim ci As New CultureInfo("de-De") 'Gewünschte Kultur
    9. Dim cc As CultureInfo = CultureInfo.CurrentCulture 'Aktuelle Kultur
    10. SetCult(cc, ci)
    11. Dim IngenieurStundensatz As Double = 123.123123
    12. Dim lblIngenieurStundensatz_Text As String = String.Format("{0}/h", IngenieurStundensatz.ToString("c"))
    13. SetCult(ci, cc)
    14. Console.WriteLine(lblIngenieurStundensatz_Text)
    15. Console.ReadKey()
    16. End Sub
    17. Private Sub SetCult(ByVal cc As CultureInfo, ByVal ci As CultureInfo)
    18. Console.WriteLine("Current Cult:{1}{0}", cc.ToString, vbTab)
    19. Console.WriteLine("Requested Cult:{1}{0}", ci.ToString, vbTab)
    20. If ci IsNot cc Then
    21. Thread.CurrentThread.CurrentCulture = ci
    22. End If
    23. Console.WriteLine()
    24. End Sub
    25. End Module


    VB.NET-Quellcode

    1. Private Sub Bsp2()
    2. Dim IngenieurStundensatz As Double = 123123.123456
    3. Dim lblIngenieurStundensatz_Text As String = String.Format("{0}/h", IngenieurStundensatz.ToString("c", New CultureInfo("De-De")))
    4. 'Dim lblIngenieurStundensatz_Text As String = String.Format("{0}€/h", IngenieurStundensatz.ToString("N2", New CultureInfo("De-De")))
    5. Console.WriteLine(lblIngenieurStundensatz_Text)
    6. End Sub


    Edit: Eventuell wird das €-Zeichen auf der Konsole nicht korrekt ausgegeben.
    Wenn es mehr NAchkommastellen sein sollen, dann einfach "c3" >> 3 Stellen, etc.

    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „exc-jdbi“ ()

    Also...
    In meinem gegebenen Fall ließ sich der Lösungsvorschlag vom Programmator

    VB.NET-Quellcode

    1. lblIngenieurStundensatz.Text = String.Format("{0:0.000} €/h", IngenieurStundensatz)


    am schnellsten umsetzen.

    Der Vorschlag von EaranMaleasi

    VB.NET-Quellcode

    1. IngenieurStundensatz.ToString("##,##0 €/h")


    war in dem Fall nicht rationell, weil damit die Variable "IngenieurStundensatz" ein String erhielt und nicht das Label "lblIngenieurStundensatz". Analog der Vorschlag von VaporiZed.

    Die Vorschläge von exc-jdbi haben bei der Erarbeitung viel Mühe gemacht. Vielen Dank. Aber ich habe mitunter je Formular 10..20 Label einen Wert zuzuweisen und da erscheint mir die Lösung für solche Fälle weniger zweckmäßig.

    Vielen Dank an alle, die sich um mein (für mich nicht einfaches) Thema bemühten.

    Und geht nicht so spät in's Bett!

    Der frühe Vogel fängt den Wurm!

    ;)
    Guten Abend @Uchi-Komi

    Mit dem obigen Code den ich eingestellt habe, wollte ich vielmehr darauf hinweisen, dass das Formatieren eines String kulturabhängig ist.

    Wie ich erkennen kann bist du aus Deutschland, und darum nehm ich an, dass die Installation von VS (Visual Studio) auch entsprechend gemacht worden ist.
    Wäre VS anders installiert worden, hättest du jetzt oben die Lösung dazu.

    Freundliche Grüsse

    exc-jdbi

    Uchi-Komi schrieb:

    Der Vorschlag von EaranMaleasi ... war in dem Fall nicht rationell, weil damit die Variable "IngenieurStundensatz" ein String erhielt und nicht das Label "lblIngenieurStundensatz". Analog der Vorschlag von VaporiZed.
    Kurz gesagt, Copy&Paste hat versagt, und du hast keine Ahnung wie du das gezeigte richtig einsetzt. Sag das doch gleich.

    Ich erkläre kurz:
    Das was @VaporiZed und ich gezeigt haben, Arbeitet auf die selbe Art und weise, wie die Lösung von @RodFromGermany (Der Programmator). Wir sind lediglich nicht so weit gegangen dir zu zeigen, wie es exakt auf deinen Fall passend anzuwenden ist. Das wäre eigentlich deine Aufgabe gewesen.
    Das sollte keine Kritik sein!

    Und ich bin meilenweit davon entfernt zu verstehen, was z.B. warum exc-jdbi mir mitteilte.

    Es ist ähnlich wie bei einem Hund, dem man ein Stöckchen hinhält.

    Hält man es niedrig, dann springt er drüber.

    Hält man zu hoch, dann sucht er sich ein niedrigeres Stöckchen oder einen anderen mit dem er spielen kann.

    Da ich weiß, dass ich ein alter Pudel bin, erfreue ich mich eben über kleine, niedrige und ungefährlich aussehende Stöckchen.

    Die Kunststückchen, die ich trotzdem neu lerne, sind eben nur kleine Kunststücke.

    So ist das mit mir!

    Am Ende war alles hilfreich, ich habe was gelernt und einige alte Programme laufen nun - Dank Eurer Hilfe - unter VS 2013.

    Die Schwierigkeit, die ich habe und nur mich betrifft, ist seit 1980 das Nebenbei-Programmieren und die fast ständige Modernisierung der Software.

    Beste Grüße :)