Announcement

Collapse
No announcement yet.

Klassen formularübergreifend nutzen . . .

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Klassen formularübergreifend nutzen . . .

    Hallo zusammen,

    ich habe mal wieder ein kleines Problem:

    Ich habe eine kleine Klassen geschrieben, die die ganze Steuerung und kommunikation mit einer "MS-ACCESS DB" regelt. In dieser Klasse wird auch eine sogenannte StringList gefüllt, um eine eigene Sprachflexibilität zu haben. Jetzt habe ich mehrere Formulare (auch andere Namespaces). Wie kann ich jetzt von jedem Namespace aus, auf diese Klasse zugreiben, deren Erstellung im Hauptformular erzeugt wurde. Sprich, im Main habe ich den Pointer zu dieser Klasse mit NEW erstellt. Wenn als mein Main geladen wurde, sidn auch schon sämtliche DB-relevaten Infos verfügbar. Jetzt muss ich nur noch diesen Pointer allen Formularen oder Namespaces zugänglichen machen. Wie stelle ich das an ???

    Gruß

    Sascha

  • #2
    Hi
    <P>
    Erzeuge eine Zugriffsmethode/Property um die String Tabelle verfügbar zu machen. Ev. wäre es sogar sinnvoll das Singleton Pattern anzuwenden, da nur eine String Tabelle pro Applikation möglich ist, so wie ich das verstanden habe.
    <P>
    <PRE>
    public class MyForm : Form {

    // ...
    private string[] stringTable = string[2] { "Erster String","Zweiter String" };

    public string[] StringTable {
    get {
    return stringTable;
    }
    }
    }
    </PRE>
    Simo

    Comment


    • #3
      Uups,

      sorry habe mich wohl etwas kompliziert ausgedrückt.

      Die Klasse kann ich aus der Main wunderbar ansprechen. Keine Thema. Aber jetzt ersteuge ich im Main auch einen Pointer auf die Klasse:

      <pre>
      public GlobalSession fSession;

      fSession = new GlobalSession(arguments.GetValue(1).ToString(), arguments.GetValue(2).ToString() );
      </pre>

      Jetzt habe ich ein 2. Formular erzeugt, und brauche die bereits erzeugte Klasse "fSession" in dem 2. Form.

      Wie kann ich das anstellen?

      Gruß

      Sascha

      P.S. Hoffentlich reden wir nicht gerade aneinander vorbei ;-

      Comment


      • #4
        Hi
        <P>
        Dann kannst Du es genau umgekehrt machen.
        Form2 hat ein Property welches erlaubt, deine GlobalSession Instanz der Form2 übergeben.
        <P>
        Falls Du schon zum Erzeugungszeitpunkt der Form2 deine GlobalSession Instanz hast, kannst Du auch den Konstruktor der Form2 überladen.
        <P>
        Simo

        Comment


        • #5
          Sorry,

          nochmal, aber wie sieht das dann in der Syntax aus ?

          Gruß

          Sasch

          Comment


          • #6
            Die Konstruktor Variante:
            <PRE>
            public class Form2 : Form {

            private GlobalSession session;

            // Überladener Konstruktor.
            public Form2(GlobalSession s) : this() {
            session = s;
            }

            // Orginal Konstruktor.
            public Form2() {
            InitializeComponent();
            }

            }
            </PRE>
            Property Variante:
            <PRE>
            public class Form2 : Form {

            private GlobalSession session;

            public GlobalSession Session {
            get {
            return session;
            }
            set {
            session = value;
            }
            }
            }
            </PRE>
            Achtung bei der 2. Variante musst Du sichher sein, dass session nicht null ist, wenn Du sie benützt.
            <P>
            Gruss Simo

            Comment


            • #7
              Tausend Dank

              Gruß
              Sasch

              Comment


              • #8
                ich würde das ganze per referenz an das form übergeben, ansonsten würdest du das object kopieren. Dazu gibts das Schlüsselwort "ref&quot

                Comment


                • #9
                  Hallo Thomas
                  <P>
                  Referenz Typen werden per Referenz übergeben. Das Schlüsselwort ref muss nur bei Werte Typen (Enums, Structs, basis Typen wie int, float, etc.) verwendet werden. D.h. bei einer Form ist das Schlüsselwort ref nicht nötig.
                  <P>
                  Gruss Simo

                  Comment


                  • #10
                    stimmt, kleiner gedankenfehle

                    Comment

                    Working...
                    X