Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VB.net Programm nach Abfrage beenden

Frage Entwicklung Visual Studio

Mitglied: listigerTeppich

listigerTeppich (Level 1) - Jetzt verbinden

19.03.2010 um 11:14 Uhr, 15334 Aufrufe, 8 Kommentare

Hallo Beisamen,

Ich arbeite an eionem VB.net Programm und habe das Problem, dass das Programm beim beenden nicht so reagiert wie ich es gerne hätte. Ich habe mir vorgestellt, dass das Programm per "Beenden"-Button und/oder per Druck auf "X" zu beenden ist. Es sollte jeweils eine Sicherheitsabfrage alá "Möchten Sie das Programm wirklich beenden?" vor der wirklichen Beendigung stattfinden.
Bisher reagiert mein Code auf die Abfrage entweder gar nicht oder nicht auf die gewünschte Weise.
mein bisheriger Code :

01.
 
02.
Private Sub cmdBeenden_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdBeenden.Click 
03.
 
04.
  
05.
 
06.
        If MsgBox("Möchten Sie das Programm wirklich beenden?", MsgBoxStyle.YesNo, Me.Text) = MsgBoxResult.No Then 
07.
                        Exit Sub 
08.
        End If 
09.
 
10.
        Close() 
11.
         
12.
    End Sub 
13.
 
14.
    Private Sub frmCopy_FormClosing(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing 
15.
 
16.
        Dim Cancel As Boolean = eventArgs.Cancel 
17.
        Dim UnloadMode As System.Windows.Forms.CloseReason = eventArgs.CloseReason 
18.
        'Programm nach Abfrage beenden 
19.
 
20.
 
21.
        If MsgBox("Möchten Sie das Programm wirklich beenden?", MsgBoxStyle.YesNo, Me.Text) = MsgBoxResult.No Then 
22.
            Cancel = True 
23.
            Exit Sub 
24.
        End If 
25.
 
26.
 
27.
 
28.
        Dim sw As StreamWriter 
29.
        EPfad = Verzeichnis1.Path 
30.
 
31.
        sw = New StreamWriter(Ini, False) 
32.
        sw.WriteLine(EPfad & Delim & "                                                    !MUSSbereitsEXISTIEREN! Einsprungsspfad für Datei-Explorer  
33.
        sw.WriteLine(Datum & Delim & "                                                   Datumsformat der Ablageordner und Protokoll-Dateien (yyyy_MM_dd)") 
34.
        sw.WriteLine(Profilload & Delim & "                                              Profilname des ZenDrum-Servers ") 
35.
        sw.WriteLine(Zdrum & Delim & "                                                   Pfad") 
36.
        sw.WriteLine(Xdrum_done & Delim & "                                        Done-Pfad  ") 
37.
        sw.WriteLine(Xdrum_log & Delim & "                                            Log-Pfad  ") 
38.
        sw.WriteLine(putty & Delim & "                                                        Putty-Pfad ") 
39.
        sw.WriteLine(sam & Delim & "                                                        PDF-SAM-Pfad ") 
40.
        sw.WriteLine(fallzahlenprot & Delim & "                                        Fallzahlenprotokoll-Pfad ") 
41.
        sw.WriteLine(zendrum_druckdienst_apc & Delim & "                Druckdateien-Ablage Netzwerk ") 
42.
        sw.WriteLine(datadir & Delim & "                                                    Druckdateien-Ablage Lokal ") 
43.
        sw.WriteLine(savedir & Delim & "                                                   Sicherungspfad-Pfad der Druckdateien") 
44.
        sw.WriteLine(logdir & Delim & "                                                      Log-Pfad für Filecopy") 
45.
        sw.Close() 
46.
 
47.
 
48.
        Close() 
49.
 
50.
 
51.
    End Sub 
52.
 
Der streamwriter In der frmCopy_FormClosing ist für die Auslagerung bestimmter Dateipfade in eine .ini gedacht und hat mit dem Problem hoffentlich nichts zu tun.
War super wenn von euch eienr nen tipp hat :D
Mitglied: 76109
19.03.2010 um 12:25 Uhr
Hallo listigerTeppich!

Bin kein VB-Net-Experte, aber so wie ich das sehe, dann setzt Du in Codezeile 22 zwar Deine interne Variable Cancel auf True aber nicht das eventArgs.Cancel

Gruß Dieter
Bitte warten ..
Mitglied: TsukiSan
19.03.2010 um 13:02 Uhr
Hallo listigerTeppich,

in VBS oder VB funktioniert das ganze in etwa so:
01.
Frage = MsgBox( "Sind Sie sicher?",vbyesno,"....") 
02.
If Frage = VbYes then 'Befehl 
03.
If Frage = VbNo then 'Befehl
Würde mich wundern, wenn's in .Net nicht ähnlich sein sollte.

Gruss
Tsuki
Bitte warten ..
Mitglied: listigerTeppich
19.03.2010 um 13:12 Uhr
Hab das "eventArgs.Cancel = True" gesetzt....hat teilweise geholfen, Wenn ich die Beendenfrage mit "Nein"-Click beantworte, schliest er nur noch die Messagebox mit der Abfrage. So soll das ja auch sein, passt also


Wenn ich aber die Frage mit Klick auf "JA" bestätige passiert weiterhin erstmal nichts...auch nach 20 mal klicken auf ja passiert nichts...erst nach einem gefolgten Klick auf "Nein" schließt sich das Programm ganz.

das Schließen des Programmes geht (nach mehrmaligen) Tests auf folgende Weise:

X-Button:

mind 1x JA-Click gefolgt von einem Nein-Click

Beenden Button:

mind 2x-JA-Click gefolgt von einem Nein-Click


der "Nein-Click" bei der Frage "Möchten Sie das Programm wirklich beenden?" ist derzeit also immer erforderlich um das Programm zu beenden - Hilfe :D


Nachtrag: Hab die msgbox mal komplett raus ausm code genommen...wenn ich jetzt Beenden will, wirft das Programm ne Stackoverflow exception bei Line 31... Ka warum aber er sagt er läuft da inne Endlosschleife...weiss einer von euch warum das der Fall sein könnte?
Bitte warten ..
Mitglied: 76109
19.03.2010 um 14:00 Uhr
Hallo listigerTeppich!

Also, nach meiner Meinung müsste ab Codzeile 22 folgendes stehen:
01.
        If MsgBox("Möchten Sie das Programm wirklich beenden?", MsgBoxStyle.YesNo, Me.Text) = MsgBoxResult.No Then 
02.
            eventArgs.Cancel = True 
03.
        Else 
04.
            Exit Sub 
05.
        End If
Das Bedeutet:
Beim Ereignisaufruf enthält die Variable "eventArgs.Cancel" den Wert False. D. h. wenn der Wert unverändert bleibt, dann wird die Form geschlossen (Exit Sub). Im anderen Fall setzt Du die Variable "eventArgs.Cancel" auf True und bedeutet das alles beim alten bleibt, aber ohne Exit Sub, sonst bleibt zwar die Form geöffnet, aber der nachfolgende Code wird nicht ausgeführt. Bleibt allerdings die Frage ob der Code da überhaupt hingehört und nicht in eine andere z.B. Button-OK-Routine oder so?

Außerdem müsstest Du erst die Variable "eventArgs.CloseReason" auswerten. D.h. hier bekommst Du einen Statuscode, der besagt ob die Form durch den User oder durch ein anderes Ereignis geschlossen werden soll (siehe weiter unten). Hier musst Du erst prüfen, ob der User die Form schließen will oder oder die Form z.B. durch einen Beenden-Button geschlossen werden soll.

Ein weiters Problem, das Du noch berücksichtigen musst ist, dass diese Erreignis-Routine auch bei der Unload/Close-Anweisung aufgerufen wird. Also Statuswerte entsprechend auswerten.

In VBA gibt es z.B folgende Statuscodes:
vbFormControlMenu 0 Der Benutzer hat auf der UserForm im Systemmenü den Befehl Schließen gewählt.
VbFormCode 1 Die Unload-Anweisung wird durch Code aufgerufen.
VbAppWindows 2 Die aktuelle Windows-Betriebsumgebungssitzung wird beendet.
VbAppTaskManager 3 Die Anwendung wird vom Windows-Task-Manager geschlossen.

Gruß Dieter
Bitte warten ..
Mitglied: listigerTeppich
19.03.2010 um 16:37 Uhr
Mh, ich bin jetz schon nen ganzen Schritt weiter... hab mitbekommen , dass die Sub "cmdBeenden_Click" falls die Frage mit "ja" beantwortet wird, die Sub frmCopy_FormClosing aufruft. Daher muss man auch 2x "JA" klicken wenn man per Beenden-Button schließen will.

Die Lösung des Problems wäre also, wenn ich in der Sub "cmdBeenden_Click" lediglich weiterleite zur Sub "frmCopy_FormClosing".

Kann mir einer sagen wie ich aus einer Sub eine andere Sub aufrufe, bzw. auf diese weiterleite ?
Bitte warten ..
Mitglied: 76109
19.03.2010 um 17:08 Uhr
Hallo listigerTeppich!

Zitat von listigerTeppich:
Die Lösung des Problems wäre also, wenn ich in der Sub "cmdBeenden_Click" lediglich weiterleite zur Sub
"frmCopy_FormClosing".

Kann mir einer sagen wie ich aus einer Sub eine andere Sub aufrufe, bzw. auf diese weiterleite ?
Das brauchsr Du doch garnicht. In deinem Beenden-Click setzt Du nur die Form-Schließen-Anweisung und die FormClosing-Routine wird im Anschluß automatisch aufgerufen, wobei dann Deine Nachfrage getätigt wird. So sollte es zumindest sein?

Gruß Dieter
Bitte warten ..
Mitglied: listigerTeppich
23.03.2010 um 14:20 Uhr
Jo, recht haste - funktioniert wunderbar.

Danke !
Bitte warten ..
Mitglied: 76109
23.03.2010 um 19:32 Uhr
Hallo listigerTeppich!

Zitat von listigerTeppich:
Jo, recht haste - funktioniert wunderbar.
Freut mich
Danke !
Gern geschehen!

Gruß Dieter
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(3)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Visual Studio
gelöst VB.Net - Problem mit Umleitung der Standard-Ausgabe (4)

Frage von emeriks zum Thema Visual Studio ...

Visual Studio
gelöst Vb.net Pfadangabe mit Wildcards wie Stern Regex Pattern (2)

Frage von Pilger83 zum Thema Visual Studio ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...