Laden...

Abfrage nachdem MainForm gestartet hat

Erstellt von kati82 vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.894 Views
K
kati82 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren
Abfrage nachdem MainForm gestartet hat

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.

N
750 Beiträge seit 2004
vor 17 Jahren

vielleicht Form.Shown-Event ?

?( wer suchet, der findet auch! :]

K
kati82 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

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)

T
18 Beiträge seit 2006
vor 17 Jahren

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

K
kati82 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

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.

179 Beiträge seit 2006
vor 17 Jahren

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

3.170 Beiträge seit 2006
vor 17 Jahren

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

915 Beiträge seit 2006
vor 17 Jahren

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(

K
kati82 Themenstarter:in
94 Beiträge seit 2006
vor 17 Jahren

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.

915 Beiträge seit 2006
vor 17 Jahren

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(

X
1.177 Beiträge seit 2006
vor 17 Jahren

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!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.