Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Abfrage nachdem MainForm gestartet hat
kati82
myCSharp.de - Member



Dabei seit:
Beiträge: 94

Themenstarter:

Abfrage nachdem MainForm gestartet hat

beantworten | zitieren | melden

Hallo,

irgendwie steh ich grad mal wieder aufm Schlauch. Ich möchte zu Beginn meines Programms einige Überprüfungen machen, beispielsweise ob ein File existiert usw. Aber irgendwie bekomme ich es nicht hin, dass zuerst das Mainform angezeigt wird und danach erst die Überprüfung gemacht wird.
Entweder startet die Überprüfung vor der Anzeige des Forms, oder bei diversen Events wie Form_Activated und sonstigen startet die Überprüfung immer wieder aufs neue (quasi ne Endlosschleife). Habe auch schon ausprobiert die Überprüfung in static void main() oder an anderen Stellen unterzubringen. Aber nichts funktioniert.

Könnt ihr mir vielleicht bei diesem Problemchen mal ein bisschen weiterhelfen? Danke.
private Nachricht | Beiträge des Benutzers
nils
myCSharp.de - Experte



Dabei seit:
Beiträge: 750
Herkunft: Nähe von Kassel

beantworten | zitieren | melden

vielleicht Form.Shown-Event ?
?( wer suchet, der findet auch! :]
private Nachricht | Beiträge des Benutzers
kati82
myCSharp.de - Member



Dabei seit:
Beiträge: 94

Themenstarter:

beantworten | zitieren | melden

Wäre ja schön, wenns das bei mir geben würde. Das ist scheinbar für die PDA-Programmierung nicht vorgesehen. (sorry, das mit dem PDA habe ich vergessen zu sagen)
private Nachricht | Beiträge des Benutzers
Tschack
myCSharp.de - Member



Dabei seit:
Beiträge: 18
Herkunft: Bayern

beantworten | zitieren | melden

Kati82,

muß das unbedingt automatisch erfolgen? Wenn es eine Anwendung im Vordergrund ist, die der Anwender verfolgt, ist es meiner Meinung nach durchaus zulässig, dem Anwender eine Meldung(TopMost) zu präsentieren mit den Buttons 'Prüfen' und 'Abbrechen'. Wenn er 'Abbrechen drückt beendet das Programm unverrichteter Dinge. Ansonsten startet deine gewünscht Überprüfung.

mfg - Hans
private Nachricht | Beiträge des Benutzers
kati82
myCSharp.de - Member



Dabei seit:
Beiträge: 94

Themenstarter:

beantworten | zitieren | melden

Im Grunde ist mir das auch egal, was zuerst gemacht oder angezeigt wird. Aber das Programm nutzen ja später andere und nicht ich. Deswegen will ich es halt für den Nutzer so einfach (oder eher bequem) wie möglich machen.
Mein Ziel ist es quasi, wenn der Nutzer, das Programm auf seinem PDA zum ersten Mal laufen lässt, das er alle nötigen Einstellungen macht, wie zum Beispiel Angabe des Ausgangsport und andere Sachen. Diese Einstellungen werden dann in einer Datei gespeichert. Ich will halt, dass der Nutzer diese Angabe nur einmal machen muss, also das dieses lästige Einstellungsfenster nur einmal kommt und nie dann nie wieder. Ich versuche im Moment halt ne günstige Lösung zu finden. Vielleicht kommt ja bald die zündende Idee.
private Nachricht | Beiträge des Benutzers
dechavue
myCSharp.de - Member

Avatar #avatar-2999.png


Dabei seit:
Beiträge: 179
Herkunft: Österreich

beantworten | zitieren | melden

Zitat
bei diversen Events wie Form_Activated und sonstigen startet die Überprüfung immer wieder aufs neue
Wenn ich dich richtig verstehe Funktioniert es mit Form_Activated so wie du willst, mit der Ausnahme, dass es immer wieder überprüft

Wie wärs wenn du das ganze mit einer Golbalen Boolschen Variable verknüpfst, die du nach dem ersten Aufruf rücksetzt, so wird deine Funktion nur das erste mal aufgerufen

 //Global:
bool Firsload = true;

private void Form_Activated(object sender, System.EventArgs e)
{
if(Firstload)
{
Firstload = false;
Check();
}
}

dechavue
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,
ich habe ein ähnliches Problem so gelöst dass am Start des Programms überprüfe, ob meine Einstellungsdatei da ist und alle Einstellungen korrekt gelesen werden können. Ist das der Fall, startet das Programm mit dem Hauptfenster. Andernfalls startet ein Konfigurationsfenster und erst nach erfolgreichem Speichern der Einstellungen startet dann das Hauptfenster... Dann kommt die Abfrage NUR beim ersten Start, oder wenn die Datei gelöscht oder unbrauchbar gemacht wurde.
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Andreas.May
myCSharp.de - Member

Avatar #avatar-2474.gif


Dabei seit:
Beiträge: 915

beantworten | zitieren | melden

Also wenn du Einstellungen speichern möchtest die über ein Formular getätigt werden das selbst nach Programmneustart nicht mehr erscheinen soll wenn bereits alle Einstellungen getätigt wurden. Dann rate ich zu einem XML File. Speichere deine Einstellungen dort ab in die Entsprechenden Nodes bzw. Atributes. Dann einfach das ganze beim Programmstart abprüfen ob XML Knoten gefüllt wurden oder nicht. Wenn nicht, starte Konfiguration, wenn gefüllt und alle Eingaben korrekt sind überspringe Konfiguration.

Vielleicht habe ich es auch nur falsch verstanden.
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(
private Nachricht | Beiträge des Benutzers
kati82
myCSharp.de - Member



Dabei seit:
Beiträge: 94

Themenstarter:

beantworten | zitieren | melden

Danke für eure Hilfe. Ich glaube, jetzt habe ich ein paar Ideen, wo ich anknüpfen kann.

@Andreas.May:
XML wäre keine schlechte Idee. Dazu müsste ich aber erst mal wissen, wie das funktioniert. Die Zeit mich da auch nochmal reinzufitzen habe ich leider nicht. Deswegen die primitive Variante mit der Datei. Zudem weiß ich nicht, ob es Unterschiede gibt zwischen XML für PDA-Anwendungen und normalen Windowsanwendungen. Wie gesagt, null Ahnung von XML.
private Nachricht | Beiträge des Benutzers
Andreas.May
myCSharp.de - Member

Avatar #avatar-2474.gif


Dabei seit:
Beiträge: 915

beantworten | zitieren | melden

Also wenn du die Zeit hast lohnt es sich einen Blick rein zuwerfen ist wirklich sehr leicht außer bei UTF-16 (unter VS2005 muss man etwas aufpassen). Auch kann ich nur anraten Librarys zu schreiben mit Standardfunktionalitäten die man immer wieder nutzt, zum Beispiel eine LogDatei Ausgabe oder Grafische Bibleotheken, UserControls usw. Bräuchtest dich daher nur einmal um ein XML Template bemühen und könntest es für andere weitere Projekte wieder verwenden. Irgendwann spart man sich damit sehr viel Zeit
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(
private Nachricht | Beiträge des Benutzers
Xynratron
myCSharp.de - Member



Dabei seit:
Beiträge: 1.177

beantworten | zitieren | melden

HI kati82,

das mit dem XML ist richtig einfach^^

erstelle eine Klasse, welche deine Einstellungen beinhaltet, mach ein [Serializeable]-Attribut dazu.

Dann kannst du deine Klasse mit dem XML- oder Binary-Serializer schreiben und wiederherstellen. Spart wirklich viel Zeit.

:-)

cu Xynratron

PS:


using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
using System.IO;

namespace SimpleAppSettings
{
    class Program
    {
        [Serializable]
        class TAppSettings
        {
            //Settings hier
            string ProgramName = "noch nicht angegeben";
            string Version = "0.1";
            int Aufrufe = 0;

            //verdammt, was vergessen, ab nächster Version ...
            [OptionalField]
            double dummy;

            //dass hier interessiert niemanden....
            [NonSerialized]
            private string _UserId = "58becfed-2732-4da4-9229-aa65d4910ad2";

            #region laden und Speichern ab hier
            public static TAppSettings LoadFromFile(string FileName)
            {
                TAppSettings ret = null;
                if (File.Exists(FileName))
                {
                    Stream file = File.Open(FileName, FileMode.Open);
                    IFormatter formatter = (IFormatter)new SoapFormatter();
                    try
                    {
                        ret = formatter.Deserialize(file) as TAppSettings;
                    }
                    catch
                    {
                        ret = new TAppSettings();
                    }
                    file.Close();
                }
                else
                {
                    ret = new TAppSettings();
                    ret.SaveToFile(FileName);
                }
                return ret;
            }
            public static bool SaveToFile(string FileName, TAppSettings AppSettings)
            {
                bool ret = true;
                Stream file = File.Open(FileName, FileMode.Create);
                IFormatter formatter = (IFormatter)new SoapFormatter();
                try
                {
                    formatter.Serialize(file, AppSettings);
                }
                catch
                {
                    ret = false;
                }
                file.Close();
                return ret;
            }
            public bool SaveToFile(string FileName)
            {
                return SaveToFile(FileName, this);
            }
            #endregion
        }         

        static void Main(string[] args)
        {
            TAppSettings ProgrammEinstellungsZeug;
            
            string Filename = @"c:\dokumente und unsinniges\meine.xml";

            if (File.Exists(Filename))
            {
                ProgrammEinstellungsZeug = TAppSettings.LoadFromFile(Filename);
            }
            else
            {
                ProgrammEinstellungsZeug = new TAppSettings();
            }

        }
    }
}


Herr, schmeiss Hirn vom Himmel - Autsch!
Zitat von herbivore
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
private Nachricht | Beiträge des Benutzers