Hallo liebes Forum,
Vorwissen:
es werden mit einem Öffnen-Dialog mit Multiselect 5 Bilder eingelesen.
Nun geht es darum: Die Function
In dieser wird das aktuelle Bild, um das es geht, in einer PictureBox angezeigt und der User soll ein Datum eingeben und mit dem Button bzw. Enter bestätigen. Daher ist die Variable
Aaarrgghh !!
Hättet ihr da bitte eine Idee für mich?
In Form1, Aufruf der Funktion: mit Bildpfad as String() -> sind die Dateinamen aus dem Öffnendialog.
Datumse ändere ich noch ab, das war Absicht!
Die Function Get_Dates (auch Form1)
und zu guter letzt Form3
PS: Warum kann man eigentlich nicht das heutige Datum eingeben? Ist doch Mist...
Später werden dann die Daten sortiert und die Bilder werden, auch sortiert, in den PictureBoxen angezeigt. Aber das habe ich schon.
Viele Grüße
Vorwissen:
es werden mit einem Öffnen-Dialog mit Multiselect 5 Bilder eingelesen.
Nun geht es darum: Die Function
Get_Dates
soll aus den Bildern die Aufnahmedaten ziehen. Hierin wird unterschieden: Falls es keine Metadaten gibt, wird Form 3 gezeigt.In dieser wird das aktuelle Bild, um das es geht, in einer PictureBox angezeigt und der User soll ein Datum eingeben und mit dem Button bzw. Enter bestätigen. Daher ist die Variable
Public eingegebenes_Datum As Date
nun befüllt und es wird in Form1 geprüft, ob wirklich etwas drinsteht. Nun das Problem: Falls es im nächsten Bild wieder keine Metadaten gibt, wird ja wieder die Form3 geöffnet. In der Variable eingegebenes_Datum
steht aber noch was drin (vom vorherigen) und mir fällt nichts ein, wie ich das umgehen kann. Wie prüfe ich das ab in dem While?Aaarrgghh !!
Hättet ihr da bitte eine Idee für mich?
In Form1, Aufruf der Funktion: mit Bildpfad as String() -> sind die Dateinamen aus dem Öffnendialog.
Datumse ändere ich noch ab, das war Absicht!
Die Function Get_Dates (auch Form1)
VB.NET-Quellcode
- Private Function Get_Dates(ByVal Bildpfad As String()) As List(Of Date)
- Dim List_of_dates = New List(Of Date)
- For i As Integer = 0 To Bildpfad.Length - 1 Step 1
- Try
- Using fs As FileStream = New FileStream(Bildpfad(i), FileMode.Open, FileAccess.Read, FileShare.Read)
- Dim img As BitmapSource = BitmapFrame.Create(fs)
- Dim md As BitmapMetadata = CType(img.Metadata, BitmapMetadata)
- Dim date1 As String = md.DateTaken
- Try
- List_of_dates.Add(CDate(date1))
- Catch ex As System.InvalidCastException 'kein Datum vorhanden
- Debug.WriteLine("Invalid Cast Exception in Function Get_Dates in Form1")
- Form_Datum_eingeben.Show()
- Form_Datum_eingeben.PictureBox_Datum_eingeben.Image = Image.FromStream(fs)
- Application.DoEvents()
- While Form_Datum_eingeben.eingegebenes_Datum = #1/1/0001 12:00:00AM# 'HIER
- Form_Datum_eingeben.Show()
- Application.DoEvents()
- End While
- List_of_dates.Add(Form_Datum_eingeben.eingegebenes_Datum)
- End Try
- End Using
- Catch ex As System.ArgumentNullException 'Pfad == NULL
- End Try
- Next
- Return List_of_dates
- End Function
und zu guter letzt Form3
VB.NET-Quellcode
- Public Class Form_Datum_eingeben
- Public eingegebenes_Datum As Date
- Private Sub Form_Datum_eingeben_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- End Sub
- Private Sub Button_bestaetigen_Click(sender As Object, e As EventArgs) Handles Button_bestaetigen.Click
- If Not System.String.IsNullOrEmpty(TextBox_Datum_eingeben.Text) Then
- Try
- eingegebenes_Datum = CDate(TextBox_Datum_eingeben.Text)
- TextBox_Datum_eingeben.Text = ""
- Application.DoEvents()
- Catch ex As System.InvalidCastException 'blöd eingegeben
- MessageBox.Show($"Falsch eingegeben, oder{vbCrLf}heutiges Datum eingegeben", "Invalid Cast Exception", MessageBoxButtons.OK, MessageBoxIcon.Warning)
- End Try
- End If
- End Sub
- Private Sub TextBox_Datum_eingeben_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox_Datum_eingeben.KeyDown
- If e.KeyCode = Keys.Enter Then
- If Not System.String.IsNullOrEmpty(TextBox_Datum_eingeben.Text) Then
- Button_bestaetigen_Click(0, Nothing)
- End If
- End If
- End Sub
- Private Sub Form_Datum_eingeben_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
- PictureBox_Datum_eingeben.Image = Nothing
- GC.Collect()
- End Sub
- End Class
PS: Warum kann man eigentlich nicht das heutige Datum eingeben? Ist doch Mist...
Später werden dann die Daten sortiert und die Bilder werden, auch sortiert, in den PictureBoxen angezeigt. Aber das habe ich schon.
Viele Grüße
An die Neulinge: Nutzt
Option Strict On
und Option Infer Off
. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.