Jak można wyświetlić kilka powiadomień jedno za drugim

0

Pytanie

Jestem trochę zdezorientowany, nie wiem, jak wyświetlać powiadomienie za drugim. Powiedzmy, na przykład, mój aktualny czas "23/11/2021 08:00", i chcę utworzyć przypomnienie dla "23/11/2021 09:30" przy pierwszym wyświetleniu powiadomienia, ale jeśli stworzę więcej przypomnienie dla "23/11/2021 09:35", zgłoszenie nie zostanie wyświetlony, jeśli nie zamknę program po wyświetleniu pierwszego zawiadomienia o przypominanie, i, na przykład, jeśli użytkownik zainstaluje ponad 1 przypomnienia z tą samą datą i czasem, to powinno być wyświetlane tylko 1 zgłoszenie.

Dziękuję.

Oto jak wygląda moja forma

Imports System.Data.OleDb

Public Class frmReminder

    Private CurrentReminderID As Integer = -1

    Private Sub frmReminder_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        BtnClear.PerformClick()
        Timer1.Enabled = True
        Timer2.Enabled = True
    End Sub

    Dim CurrentDateTime As Date
    Dim ReminderDateTime As Date

    Public Sub ShowNotification()
        Notification.ShowBalloonTip(1000, "Reminder", "Customer Order Due!", ToolTipIcon.None)
    End Sub

    Private Sub DateTimeVariable()
        CurrentDateTime = Date.Now
        CurrentDateTime = FormatDateTime(DateTime.Now, DateFormat.GeneralDate)
        ReminderDateTime = FormatDateTime(ReminderDateTime, DateFormat.GeneralDate)
        If CurrentDateTime = ReminderDateTime Then
            ShowNotification()

        Else
            If DbConnect() Then
                Dim SQLCmd As New OleDbCommand
                With SQLCmd
                    .Connection = cn
                    .CommandText = "SELECT ReminderDate FROM TblReminder"
                    Dim rs As OleDbDataReader = .ExecuteReader()
                        ReminderDateTime = (rs(0))
                End With
            End If
            cn.Close()
        End If
    End Sub

    Private Sub BtnClear_Click(sender As Object, e As EventArgs) Handles BtnClear.Click
        Label6.Text = ""
        TxtCustName.Text = ""
        TxtDeviceInfo.Text = ""
        TxtPrice.Text = ""
        TxtReminderDateTime.ResetText()
        CurrentReminderID = -1
    End Sub

    Private Sub BtnSetReminder_Click(sender As Object, e As EventArgs) Handles BtnSetReminder.Click

        If TxtCustName.Text.Length < 1 Then
            MessageBox.Show("Customer name is empty!" & vbCrLf, "Reminder", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            TxtCustName.Focus()

        ElseIf TxtDeviceInfo.Text.Length < 1 Then
            MessageBox.Show("Device Information is empty!" & vbCrLf, "Reminder", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            TxtDeviceInfo.Focus()

        ElseIf TxtPrice.Text.Length < 1 Then
            MessageBox.Show("No price entered!" & vbCrLf, "Reminder", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            TxtPrice.Focus()

        ElseIf DbConnect() Then
            Dim SQLCmd As New OleDbCommand
            If CurrentReminderID = -1 Then
                With SQLCmd
                    .Connection = cn
                    .CommandText = "Insert into TblReminder (CustomerName, DeviceInfo, RepairPrice, ReminderDate)"
                    .CommandText &= "Values (@CustomerName, @DeviceInfo, @RepairPrice, @ReminderDate)"
                    .Parameters.AddWithValue("@CustomerName", TxtCustName.Text)
                    .Parameters.AddWithValue("@DeviceInfo", TxtDeviceInfo.Text)
                    .Parameters.AddWithValue("@RepairPrice", TxtPrice.Text)
                    .Parameters.AddWithValue(" @ReminderDate", TxtReminderDateTime.Text)
                    .ExecuteNonQuery()

                    .CommandText = "Select @@Identity"
                    CurrentReminderID = .ExecuteScalar
                    Label6.Text = CurrentReminderID
                    'ShowNotification()
                End With
            End If
        End If
    End Sub

    Private Sub TxtCustName_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TxtCustName.KeyPress
        If Not Char.IsLetter(e.KeyChar) Then 'Checks if key pressed isn't a digit
            If Asc(e.KeyChar) <> Keys.Back Then 'Checks the key pressed wasn't Backspace
                e.Handled = True 'It doesn't take any further action
            End If
        End If
    End Sub

    Private Sub TxtPrice_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TxtPrice.KeyPress
        If Not Char.IsDigit(e.KeyChar) Then 'Checks if key pressed isn't a digit
            If Asc(e.KeyChar) <> Keys.Back Then 'Checks the key pressed wasn't Backspace
                e.Handled = True 'It doesn't take any further action
            End If
        End If
    End Sub

    Private Sub Notification_Click(sender As Object, e As EventArgs) Handles Notification.Click
        frmReminderInfo.Show()
    End Sub

    Private Sub Notification_BalloonTipClicked(sender As Object, e As EventArgs) Handles Notification.BalloonTipClicked
        frmReminderInfo.Show()
    End Sub

    Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
        DateTimeVariable()
    End Sub

    Private Sub BtnOpenReminders_Click(sender As Object, e As EventArgs) Handles BtnOpenReminders.Click
        frmReminderInfo.Show()
    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        TxtCurrentDateTime.Text = Date.Now.ToString("dd/MM/yyyy      HH:mm")
    End Sub
End Class
ms-access notifications timer vb.net
2021-11-23 23:32:41
1

Najlepsza odpowiedź

0

Ja bym pomyślał, że można zainstalować dołączone właściwości programatora podczas tworzenia. Nie wzialem BtnClear w komentarzach, więc ignoruję kształt.Pobieraj całkowicie.

CurrentDateTime = FormatDateTime(DateTime.Now, DateFormat.GeneralDate)
ReminderDateTime = FormatDateTime(ReminderDateTime, DateFormat.GeneralDate)

Nie można przypisać a String Od FormatDateTime Dla CurrentDataTime ponieważ jest zadeklarowana jako Date. Właśnie wyznaczono Date do niego jest wiersz wyżej. To samo z ReminderDateTime. Zachowaj swoje widzenia jako Date dopóki nie trzeba ich wyświetlić.

Ja odłączyłem kod bazy danych od kodu interfejsu użytkownika. W pracy While cykl, nadal zastępować wartość ReminderDateTime tak, że w zmiennej będzie tylko wartość końcową. W związku z tym zmieniłem tylko wybór na Last() i wykorzystał ExecuteScalar. Nie wiem, po co jest ci potrzebna tylko ostatnia data, ale właśnie to sprawia, że twój kod.

Private CurrentReminderID As Integer = -1
Private CurrentDateTime As Date
Private ReminderDateTime As Date

Public Sub ShowNotification()
    Notification.ShowBalloonTip(1000, "Reminder", "Customer Order Due!", ToolTipIcon.None)
End Sub

Private Sub DateTimeVariable()
    CurrentDateTime = Date.Now
    If CurrentDateTime = ReminderDateTime Then
        ShowNotification()
    Else
        ReminderDateTime = RetrieveReminderDate()
    End If
End Sub

Private Function RetrieveReminderDate() As Date
    Dim RemindDate As New Date
    Using cn As New OleDbConnection(OPConStr),
            cmd As New OleDbCommand("SELECT Last(ReminderDate) FROM TblReminder", cn)
        cn.Open()
        RemindDate = CDate(cmd.ExecuteScalar)
    End Using
    Return RemindDate
End Function

Private Sub BtnClear_Click(sender As Object, e As EventArgs) Handles BtnClear.Click
    Label6.Text = ""
    TxtCustName.Text = ""
    TxtDeviceInfo.Text = ""
    TxtPrice.Text = ""
    DtpReminderDateTime.ResetText()
    CurrentReminderID = -1
End Sub

Private Sub BtnSetReminder_Click(sender As Object, e As EventArgs) Handles BtnSetReminder.Click
    Dim price As Decimal
    If TxtCustName.Text.Length < 1 Then
        MessageBox.Show("Customer name is empty!" & vbCrLf, "Reminder", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        TxtCustName.Focus()
        Exit Sub
    ElseIf TxtDeviceInfo.Text.Length < 1 Then
        MessageBox.Show("Device Information is empty!" & vbCrLf, "Reminder", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        TxtDeviceInfo.Focus()
        Exit Sub
    ElseIf Not Decimal.TryParse(TxtPrice.Text, price) Then
        MessageBox.Show("No price entered!" & vbCrLf, "Reminder", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        TxtPrice.Focus()
        Exit Sub
    Else
        If CurrentReminderID = -1 Then
            CurrentReminderID = SaveReminder(TxtCustName.Text, TxtDeviceInfo.Text, price, DtpReminderDateTime.Value)
        End If
    End If
End Sub

Private Function SaveReminder(Name As String, Device As String, Price As Decimal, RemindDate As Date) As Integer
    Dim Id As Integer
    Using cn As New OleDbConnection(OPConStr),
            cmd As New OleDbCommand("Insert into TblReminder (CustomerName, DeviceInfo, RepairPrice, ReminderDate)
                                    Values (@CustomerName, @DeviceInfo, @RepairPrice, @ReminderDate)")
        With cmd.Parameters
            .Add("@CustomerName", OleDbType.VarChar).Value = Name
            .Add("@DeviceInfo", OleDbType.VarChar).Value = Device
            .Add("@RepairPrice", OleDbType.Decimal).Value = Price
            .Add(" @ReminderDate", OleDbType.Date).Value = RemindDate
        End With
        cn.Open()
        cmd.ExecuteNonQuery()
        cmd.CommandText = "Select @@Identity"
        Id = CInt(cmd.ExecuteScalar)
    End Using
    Return Id
End Function

Private Sub Notification_Click(sender As Object, e As EventArgs) Handles Notification.Click
    frmReminderInfo.Show()
End Sub

Private Sub Notification_BalloonTipClicked(sender As Object, e As EventArgs) Handles Notification.BalloonTipClicked
    frmReminderInfo.Show()
End Sub

Private Sub BtnOpenReminders_Click(sender As Object, e As EventArgs) Handles BtnOpenReminders.Click
    frmReminderInfo.Show()
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    TxtCurrentDateTime.Text = Date.Now.ToString("dd/MM/yyyy      HH:mm")
End Sub

Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
    DateTimeVariable()
End Sub
2021-11-24 17:12:59

Dziękuję za odpowiedzi, nie chcę, aby data i godzina ostatniego, chcę sprawdzić wszystkie zapisane daty i czasu z bazy danych pole (ReminderDate) i porównać daty i czasu, zapisane w mojej bazie danych z aktualną datą i czasem, jeśli porównania "=", to powiadomienia mają być wyświetlane, nawet jeśli nie ma innej nadchodzące przypomnienia, jak, na przykład, w 5 minut czasu.
Yousaer10

@Yousaer10, Proszę, odpowiedz na moje pytanie w komentarzach do twojego pytania, odnoszącej się do powiadomień.
Mary

@Yousaer10 Co do przypomnienia, czy można edytować kod w swoim pytaniu, aby pokazać, czego chcesz?
Mary

Przepraszam, nie wiedziałem, że pętla while zostanie nadpisane, więc usunąłem pętli while, tak jak pan powiedział, że ja nadal zastępować wartość ReminderDateTime.
Yousaer10

Ja także odpowiedział na pytania w swoim poście.
Yousaer10

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................