Vyvolání události FormClosing když nebyl zobrazen Form   zodpovězená otázka

VB.NET, WinForms

Dobrý den,

mám aplikaci, u které se při spuštění s parametrem /startup nezobrazí okno, ale jen NotifyIcon. Tady je ukázka:

tohle je ve startovním modulu

    Private WithEvents frm As Form1

    Public Sub Main()
        Application.EnableVisualStyles()

        frm = New Form1

        If Not Environment.CommandLine.ToLower.Contains("/startup") Then
            frm.Show()
        End If

        Application.Run()
    End Sub

    Private Sub frm_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles frm.FormClosed
        Application.Exit()
    End Sub

a tohle ve formuláři

    Private Sub NotifyIcon1_MouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseDoubleClick
        Select Case Me.Visible
            Case True : Me.Hide()
            Case False : Me.Show()
        End Select
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Dim x As Integer = MessageBox.Show("Ukoncit?", "", MessageBoxButtons.YesNo)

        If x = vbNo Then e.Cancel = True
    End Sub

    Private Sub ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem1.Click
        'ToolStripMenuItem1 je polozka contextového menu přiřazeného k NotifyIcon
        Me.Close()
    End Sub

Problém je tenhle:

když aplikace nastartuje bez toho parametru a pokusím se ukončit program tlačítkem ToolStripMenuItem1, vše je ok. Kdyz ho ale spustím s parametrem, tak nastává ten problém, že se nedojde k události FormClosing a ukončí se jen formulář, ne celá aplikace.

Nevíte někdo jak to řešit, aby to pracovalo stejně po spuštění i po tom co bylo zobrazeno okno?

Za věchny nápady předem děkuju

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Proč události tak složitě probublávat... Aplikaci ukončete rovnou při kliknutí na ToolStripMenuItem1_

    Private Sub ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem1.Click
        'ToolStripMenuItem1 je polozka contextového menu přiřazeného k NotifyIcon
        Application.Exit()
    End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vyzkoušejte co to dělá... Nevyvolá událost FormClosing

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ten kód neměl vyvolat událost FormClosing, ale měl provést, co jste v ní dělal.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zkuste Application.Run zaměnit za Application.Run(frm). A prosím vás když něco vrací hodnotu typu výčtový typ (MessageBox.Show), tak to neukládejte do Integeru, protože to je prasárna i když to funguje...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Application.Run(frm) jsem zkoušel, ale vždycky to zobrazí okno. Když spouštím aplikaci s parametrem /startup, tak nechci aby se okno zobrazilo, natož aby probliklo.

problém je ten, že když u formuláře neproběhne událost Load(ještě jsem nevolal frm.Show) a pokusím se ho zavřít (ať už Me.Close nebo Application.Exit) nedojde k události FormClosing, prostě ji ignoruje.

jo a díky za upozornění na návratový hodnoty, budu si to pamatovat

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak tohle mám vyzkoušeno a na 100% to funguje:

Public Class Form1
  Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles Me.FormClosing
    If e.CloseReason = CloseReason.UserClosing Then
      Select Case MessageBox.Show("Ukončit aplikaci?", Me.Text, MessageBoxButtons.YesNo)
        Case DialogResult.Yes
          Application.Exit()
        Case DialogResult.No
          e.Cancel = True
      End Select
    End If
  End Sub
End Class
Module Main
  Sub Main()
    Dim f1 As New Form1
    If My.Application.CommandLineArgs.Contains("SHOW") Then
      f1.Show()
    End If
    Application.Run()
  End Sub
End Module

Ve vlastnostech projektu zkontrolujte, zda-li máte vypnutý Application Framework a nastaveno Startup object: Sub Main.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback