Seite 1 von 2 12 Letzte »
Ergebnis 1 bis 20 von 22

C Sharp Formkommunikation

  1. #1 Zitieren
    Ehrengarde Avatar von Niles
    Registriert seit
    Jun 2006
    Beiträge
    2.381
    Hi,

    nachdem mir erklärt wurde ich wie Daten von Form 2 nach Form 1 bekomme, wollte ich fragen wie es umgekehrt geht. Also zb den Inhalt einer Textbox in Form 1, in den Inhalt einer Textbox in Form2 zu bekommen.


    mfg
    Die Zehn werden fallen...
    Niles ist offline

  2. #2 Zitieren
    Provinzheld
    Registriert seit
    Jan 2009
    Beiträge
    225
    Hier dürftest du fündig werden.
    Auch bei weiteren Fragen zum Thema C# kann ich dir diese Community nur ans Herz legen.
    Dread ist offline

  3. #3 Zitieren
    Ehrengarde Avatar von Niles
    Registriert seit
    Jun 2006
    Beiträge
    2.381
    Zitat Zitat von Dread Beitrag anzeigen
    Hier dürftest du fündig werden.
    Auch bei weiteren Fragen zum Thema C# kann ich dir diese Community nur ans Herz legen.
    So, wie es da steht, müsste ich, so wie ich es verstanden habe, dann mein ganzes Projekt neu machen. Gibt es da keine andere Lösung?
    Die Zehn werden fallen...
    Niles ist offline

  4. #4 Zitieren
    Demigod Avatar von Sumpfkrautjunkie
    Registriert seit
    Nov 2004
    Ort
    München
    Beiträge
    9.108
    Du könntest deiner Form2 beim Erstellen die Form1 als Parameter übergeben:
    Code:
    frm2 = new Form2(this);
    frm2.Show(this);
    Code:
    new Form2(this)
    ruft den Konstruktor von Form2 auf und übergibt sich selbst als Parameter.

    In Form2 müsstest du dann eine
    Form1 Variable erstellen:
    Code:
    Form1 fMain;
    (außerhalb jeder Methode, direkt in der class)
    Dann müsstest du den Konstruktor von Form2 so anpassen, dass er eine Form1 empfangen kann:
    Code:
    public Form2 (Form1 f)
    {
          InitializeComponent();
          fMain=f;
    }
    Jetzt kannst du über fMain auf die Form1 zugreifen.

    Das Ganze ist dann recht analog zum umgekehrten Zugriff(von Form1 auf Form2)
    http://forum.worldofplayers.de/forum...3&#post8570883
    Sumpfkrautjunkie ist offline

  5. #5 Zitieren
    Ehrengarde Avatar von Niles
    Registriert seit
    Jun 2006
    Beiträge
    2.381
    Jo, funktioniert perfekt.


    Kann man machen das Form 2 nur einmal aufeinmal aufgerufen werden kann? Also das man Form 2 erst schließen muss bevor man es wieder öffnen kann.
    Die Zehn werden fallen...
    Niles ist offline Geändert von Niles (18.02.2009 um 15:35 Uhr)

  6. #6 Zitieren
    Demigod Avatar von Sumpfkrautjunkie
    Registriert seit
    Nov 2004
    Ort
    München
    Beiträge
    9.108
    Da gibts verschiedene Möglichkeiten:
    ShowDialog:
    Verwende statt der Methode Show die Methode ShowDialog zum Anzeigen deiner Form:
    Code:
    frm2.ShowDialog(this);
    Solange diese Form offen ist, kann der User nicht auf die anderen Forms zugreifen.

    Eine weitere Möglichkeit wäre abzufragen, ob Form2 schon vorhanden ist:
    Code:
    bool offen = false; //Variable die speichert ob eine entsprechende form gefunden wurde
                foreach (Form f in Application.OpenForms)//läuft alle Forms in der Liste der derzeit offenen Forms durch (foreach:  für jedes Element des Typs Form in der Liste  Application.OpenForms, wobei dieses Element Lokal in f gespeichert wird)
                {
                    if (f is Form2)//wenn f vom Typ Form2 ist (da Form2 von Form geerbt ist, ist f auch vom Typ Form)
                    {
                        offen = true;//wir haben ein Fenster Form2 gefunden, das offen ist
                        break;//verlässt den foreach Block, da ein weiteres Durchlaufen ja nicht mehr nötig ist
                    }
                }
                if (!offen)//wenn offen false ist (also es keine Form2 gibt)
                {
                    Form2 frm2 = new Form2(this);
                    frm2.Show(this);
                }
    Sumpfkrautjunkie ist offline

  7. #7 Zitieren
    Ehrengarde Avatar von Niles
    Registriert seit
    Jun 2006
    Beiträge
    2.381
    Ok, danke.


    Gibt es eine möglichkeit Dinge so zu speichern, das sie nach neustart des Programmes noch vorhanden sind?

    ZB über eine Textdatei?



    Und: Kann man Buttons per Befehl, ohne Visible, erschaffen?

    ZB wenn man einen Button drückt soll jedesmal wenn man ihn Drückt ein anderer Button erschaffen werden.
    Die Zehn werden fallen...
    Niles ist offline

  8. #8 Zitieren
    Demigod Avatar von Sumpfkrautjunkie
    Registriert seit
    Nov 2004
    Ort
    München
    Beiträge
    9.108
    Und: Kann man Buttons per Befehl, ohne Visible, erschaffen?

    ZB wenn man einen Button drückt soll jedesmal wenn man ihn Drückt ein anderer Button erschaffen werden.
    Was genau meinst du?
    Buttons direkt aus dem code erschaffen, also ohne den GUI(Oberflächen)-Designer?
    Wenn ja (ubrigens macht deine Form1.Designer.cs kaum was anderes, da kannst du also auch gucken):
    Im Erstellerbutton:

    Code:
    for (int i = 0; i < 5; i++)//for-schleife bis 5
    
    {
        Button bt = new Button();//erstelle einen neuen Button
    
        bt.Location = new System.Drawing.Point(30*i+20, 2);//Buttonposition (x,y)-Kordinaten
    
        bt.Name = "B" + i.ToString();//der Name des Buttons
    
        bt.Size = new System.Drawing.Size(30, 20);//Breite und Höhe des Buttons
    
        bt.TabIndex = i;//Tabulatorindex (Reihenfolge, in der man beim drücken der Tabulatortaste durch die Controls geht)
    
        bt.Text = bt.Name;//Der Text auf dem Button, ich nehme hier einfach mal seinen Namen
    
        bt.UseVisualStyleBackColor = true;//irgendwas zum Zeichnen, eher irrelevant
    
        bt.Click += new System.EventHandler(this.BT_Click);//ruft beim Klicken die Funktion BT_Click auf. 
    
        bt.BringToFront();//bringt den Button an die oberste Anzeigeebene
    
        this.Controls.Add(bt);//fügt den Button schließlich zur Form hinzu.
    
    }
    Als eigene Methode:
    Code:
    private void BT_Click(object sender, EventArgs e)//Funktion die beim Klicken unserer Klonbuttons aufgerufen wird (siehe oben)
    
    {
        MessageBox.Show(((Button)sender).Name + " geklickt!");//gibt eine Messagebox aus. Sender ist ein Parameter der Funktion.
    
        //Da er als object übergeben wird, müssen wir ihn mittels (Button)sender) in einen button umwandeln, sodass wir mit .Name auf seinen Namen zugreifen und diesen anzeigen lassen können
    
    }
    Über diesen Namen können wir dann (wie in der Schomessage zu sehen), auch herausfinden, welcher Button geklickt wurde (obwohl alle Buttons beim Klicken die gleiche Methode aufrufen).

    Gibt es eine möglichkeit Dinge so zu speichern, das sie nach neustart des Programmes noch vorhanden sind?

    ZB über eine Textdatei?
    Textdateien sind hier die einfachste Lösung.

    Angenommen du hast 2 Buttons erstellt:
    Einer speichert, der andere lädt.
    Als using musst du nich System.IO; einbinden.
    Ich lasse nun einfach mal die Zeit/Datum als string speichern (du kannst es dann natürlich auch auf andere Variablen übertragen):
    Speichern:
    Code:
    using (StreamWriter sw = new StreamWriter("test.txt"))//using ist praktisch um objekte automatisch zu schließen und zu entfernen. Der Streamwriter sw existiert nur innerhalb von using und wird automatisch
    
                    //geschlossen (es ist wichtig Schreib/Lesestreams zu schließen). Beim Erstellen von Streamwriter habe ich hier mal die datei Angegeben, welche falls nicht vorhanden, erstellt wird.
    
    {
        sw.WriteLine(DateTime.Now.TimeOfDay.ToString());//Schreibt eine Zeile. DateTime.Now.TimeOfDay liefert die aktuelle Zeit, welche mit ToString in einen String umgewandelt wird (wir schreiben ja Strings)
    
        sw.WriteLine(DateTime.Today.Day.ToString());//gleiches, wie oben für den Tag
    
    }
    Laden:
    Code:
    if (File.Exists("test.txt"))//existiert die Datei überhaupt?
    
    {
        using (StreamReader sr = new StreamReader("test.txt"))//Beim Konstruktor wird die Datei angegeben, welche gelesen werden soll.
    
        {
            string line;//lokale Variable zum speichern der eingelesenen Zeile
    
            while ((line = sr.ReadLine()) != null) //ReadLine() liefert die Zeile als string zurück. Dieser wird line zugewiesen und anschließend überprüft, ob überhaupt ein gültiger string vorliegt.
    
            //so wird die Datei von anfang bis Ende ausgelesen (die länge ist nicht bekannt und deshalb auch while + diese != null Abfrage
    
            {
                MessageBox.Show(line);//Gibt line aus
    
            }
        }
    }
    Bei fragen zum Code kannst du ruhig fragen (einiges ist vielleicht nicht sehr Einsteigerfreundlich erklärt)
    Sumpfkrautjunkie ist offline

  9. #9 Zitieren
    Ehrengarde Avatar von Niles
    Registriert seit
    Jun 2006
    Beiträge
    2.381
    Jop, das ganze funktioniert sehr gut und ist mit deiner Beschreibung nicht sonderlich schwer zu verstehen. Dafür schon mal vielen Dank.



    Noch eine Frage: Wie kann man per Klick auf eine Picturebox das Bild der Picturebox ändern?

    Wenn ich

    Code:
    Image img = Image.FromFile(Application.ExecutablePath + "\\Resources\\Name.gif");
    pictureBox2.Image = img;
    eingebe und das Bild unter Form1.resx hinzugefügt habe ist der Pfad falsch.
    Die Zehn werden fallen...
    Niles ist offline Geändert von Niles (18.02.2009 um 19:28 Uhr)

  10. #10 Zitieren
    Demigod Avatar von Sumpfkrautjunkie
    Registriert seit
    Nov 2004
    Ort
    München
    Beiträge
    9.108
    Wenn du Dateien als Resource einfügst, dann werden sie in die .exe eingebunden, sodass man sie nicht mehr zusätzlich mit dem Programm mitliefern muss.
    Der Pfad ist falsch, da Application.ExecutablePath den Pfad der .exe liefert,
    Der Resources-Pfad liegt aber einpaar Ordnerebenen darüber.

    Du kannst Resourcen über Resources.resx hinzufügen.
    Zugreifen kanst du dann über
    PROJEKTNAME.Properties.Resources.NAME
    Code:
    pictureBox1.Image = picboxtest.Properties.Resources.c;
    (wie man darauf zugreift, wenn mans über Form1.resx einfügt, weiß ich spontan nicht).
    Sumpfkrautjunkie ist offline

  11. #11 Zitieren
    Ehrengarde Avatar von Niles
    Registriert seit
    Jun 2006
    Beiträge
    2.381
    Ja, das reicht und funktioniert super.


    Zwei Fragen:

    Wenn man Bilder einfügen kann, kann man dann auch Sounds einfügen und abspielen lassen?

    Kann man ein Form auf Vollbild machen, so das es wie ein Spiel etc aussieht (Keine Startleiste, Überschrift etc)?
    Die Zehn werden fallen...
    Niles ist offline

  12. #12 Zitieren
    Demigod Avatar von Sumpfkrautjunkie
    Registriert seit
    Nov 2004
    Ort
    München
    Beiträge
    9.108
    Bezüglich Sounds wäre interessant:
    http://www.codeguru.com/csharp/cshar...icle.php/c6143
    http://bytes.com/groups/net-c/521813...e-snd_resource

    Und eine wirklich gute Seite mit vielen guten Artikeln:
    http://www.codeproject.com/KB/audio-video/nbass.aspx
    Kann man ein Form auf Vollbild machen, so das es wie ein Spiel etc aussieht (Keine Startleiste, Überschrift etc)?
    Versuchs mal damit:
    http://www.codeproject.com/KB/cs/Ful...DotNetApp.aspx

    Wenn du was Richtung Spieleentwicklung machen möchtest, dann solltest du dir mal XNA ansehen:
    http://de.wikipedia.org/wiki/XNA_(Microsoft)

    Nimmt einem wirklich sehr viel Arbeit ab.
    Sumpfkrautjunkie ist offline

  13. #13 Zitieren
    Ehrengarde Avatar von Niles
    Registriert seit
    Jun 2006
    Beiträge
    2.381
    Danke für die Links, leider sind die Seiten auf Englisch, deshalb ist es schwer da Codes zu finden.



    Noch eins: Kann man herrausfinden was für eine Bildschrimauflösung benutzt wird?
    Die Zehn werden fallen...
    Niles ist offline

  14. #14 Zitieren
    Demigod Avatar von Sumpfkrautjunkie
    Registriert seit
    Nov 2004
    Ort
    München
    Beiträge
    9.108
    Noch eins: Kann man herrausfinden was für eine Bildschrimauflösung benutzt wird?

    Screen.PrimaryScreen.Bounds.Width ist die Breite und
    Screen.PrimaryScreen.Bounds.Height die Höhe.


    Danke für die Links, leider sind die Seiten auf Englisch, deshalb ist es schwer da Codes zu finden.
    Wenn man was in Richtung Programmieren machen möchte, kommt man um Englisch nicht drumherum, da die allermeisten Beispiele unt Tuts auf englisch sind
    Sumpfkrautjunkie ist offline

  15. #15 Zitieren
    Ehrengarde Avatar von Niles
    Registriert seit
    Jun 2006
    Beiträge
    2.381
    Zitat Zitat von Sumpfkrautjunkie Beitrag anzeigen
    Screen.PrimaryScreen.Bounds.Width ist die Breite und
    Screen.PrimaryScreen.Bounds.Height die Höhe.



    Wenn man was in Richtung Programmieren machen möchte, kommt man um Englisch nicht drumherum, da die allermeisten Beispiele unt Tuts auf englisch sind
    Ok, danke. Englisch kann ich zumindest so gut das ich die da geschilderten Beispiele verstehe, nur wenn es dann ins "Fachjargon" geht habe ich da meine Probleme.


    Ich habe es jetzt geschafft die Form zu Vollbild zu machen. Wie schaff ich es, das die Buttons, Labels etc mit mit dem maximieren des Forms gesteckt werden? Wenn das nicht geht: Wie schaff ich es das der Inhalt der Form zumindest zentriert ist?
    Die Zehn werden fallen...
    Niles ist offline

  16. #16 Zitieren
    Demigod Avatar von Sumpfkrautjunkie
    Registriert seit
    Nov 2004
    Ort
    München
    Beiträge
    9.108
    Das müsstest du manuell machen.
    Auf die Buttons & co kannst du über Name.Eigenschaft zugreifen und so
    left/top/width/height anpassen.

    Wenn die Controls auch beim manuellen Skalieren des Fensters durch den User umpositioniert werden sollen, dann mache die Skalierung innerhalb des Resize-Events deiner Form (Form auswählen, dann im Eigenschaftsfenster auf den Blitz und dann doppelt auf Resize klicken).
    Es kann oft sinnvoll sein Controls in einen Container, wie Panel oder eine Groupbox zu packen(im Toolbox-Fenster zu finden):
    Wenn man den Container verschiebt, dann verschiebt man die darin enthaltenen Controls gleich mit.

    Mal ein (zugegebenermaßen unschönes (da mit konstanten Werten) auf die Schnelle aufgetriebenes) Beispiel:
    Code:
                GBDataContent.Width = (this.Width -GBData.Width-20-12-8)/2;
                GBDataContent.Height = this.Height - 50;
                GBData.Left = GBDataContent.Left + GBDataContent.Width + 6;
                GBFilterContent.Width = GBDataContent.Width;
                GBFilterContent.Height = GBDataContent.Height;
                GBFilterContent.Left = GBData.Left + GBData.Width + 6;
                GBFilter.Left = GBData.Left;
                GBFegiltert.Left = GBData.Left;
                LBDataContent.Width = GBDataContent.Width - 20;
                LBDataContent.Height = GBDataContent.Height - 20;
                LBFilterContent.Width=LBDataContent.Width;
                LBFilterContent.Height = LBDataContent.Height;
    Sumpfkrautjunkie ist offline

  17. #17 Zitieren
    Ehrengarde Avatar von Niles
    Registriert seit
    Jun 2006
    Beiträge
    2.381
    Jo, nochmal danke.



    Kann man machen, das sich 2 Buttons aufeinander zu bewegen?

    Ich habe es mit:

    Code:
    private void timer2_Tick(object sender, EventArgs e)
            {
                if (button2.Location.X < button1.Location.X)
                {
                    this.button2.Location = new Point(button2.Location.X + 1, button1.Location.Y);
                }
                if (button2.Location.X > button1.Location.X)
                {
                    this.button2.Location = new Point(button2.Location.X - 1, button1.Location.Y);
                }
                
            }
    
            private void timer3_Tick(object sender, EventArgs e)
            {
                if (button2.Location.Y < button1.Location.Y)
                {
                    this.button2.Location = new Point(button2.Location.X, button1.Location.Y + 1);
                }
                if (button2.Location.Y > button1.Location.Y)
                {
                    this.button2.Location = new Point(button2.Location.X, button1.Location.Y - 1);
                }
            }
    Probiert, aber es geht nicht so wirklich.
    Die Zehn werden fallen...
    Niles ist offline

  18. #18 Zitieren
    Demigod Avatar von Sumpfkrautjunkie
    Registriert seit
    Nov 2004
    Ort
    München
    Beiträge
    9.108
    Bewegt sich button2 überhaupt nicht?
    Sind timer2 und timer3 enabled?
    Vom Code her müsste es gehen.
    Einziger Fehler wäre, dass du für button2 die Y-Koordinate von button1 angibst:
    button1.Location.Y
    Sumpfkrautjunkie ist offline

  19. #19 Zitieren
    Ehrengarde Avatar von Niles
    Registriert seit
    Jun 2006
    Beiträge
    2.381
    Zitat Zitat von Sumpfkrautjunkie Beitrag anzeigen
    Bewegt sich button2 überhaupt nicht?
    Sind timer2 und timer3 enabled?
    Vom Code her müsste es gehen.
    Einziger Fehler wäre, dass du für button2 die Y-Koordinate von button1 angibst:
    button1.Location.Y
    Oh, das war der Fehler...

    Kann man Strings auslesen? ZB so das nur die ersten 4 Zeichen relevant sind?

    Hast Du ein paar gute Links zu Anfänger Tutorials von XML? Bei Google finde ich nur Fortgeschrittenenzeug.
    Die Zehn werden fallen...
    Niles ist offline

  20. #20 Zitieren
    Demigod Avatar von Sumpfkrautjunkie
    Registriert seit
    Nov 2004
    Ort
    München
    Beiträge
    9.108
    Bezüglich deines gelöschten Beitrags habe ich ein kleines Beispielprojekt gebastelt:
    picboxtest.7z
    Button 1 lässt sich mit der Maus verschieben, Button 2 bewegt sich auf Button 1 zu.

    Das Prinzip ist relativ simpel:
    B2 ist je eine gewisse Breite und Höhe von B1 entfernt.
    Wenn man B2 nun jedesmal um ein 1 näher an B1 bringt, braucht man ja eine gewisse Anzahl an Bewegungen.
    Innerhalb dieser Anzahl muss man auch die Höhenbewegung unterbringen.
    Diese weicht aber in der Regel von der Breitenbewegung ab.
    Man bildet also ein Steigungsdreieck:
    (Y1-Y2)/(X1-X2)
    Uns speichert es als float (Kommazahl).

    Nun muss man je nach Bewegungsrichtung (Links/Rechts) diese Steigung zur Höhe hinzuaddieren bzw von der Höhe subtrahieren.
    Problem: Die Position des Buttons wird in Ganzzahlen gespeichert (integer), wenn man also die Steigung hinzuaddiert, wird diese gerundet und man erhält nichts Brauchbares.
    Mann muss die Höhe also in einer Floatvariablen verwalten und mit der Buttonpositions synchronisieren (dann macht das Runden auch Sinn).

    Kann man Strings auslesen? ZB so das nur die ersten 4 Zeichen relevant sind?
    Zu Strings wäre das hier interessant:
    http://www.dotnetcurry.com/ShowArticle.aspx?ID=189

    Wenn du die ersten 4 Zeichen haben möchtest:
    Code:
    neuerstring = deinstring.Substring(0, 4);
    Hast Du ein paar gute Links zu Anfänger Tutorials von XML? Bei Google finde ich nur Fortgeschrittenenzeug.
    Tut mir Leid, aber ich kenne keine (arbeite selbst nicht viel Mit XML außer zum "offenen" Speichern von Daten).
    Sumpfkrautjunkie ist offline

Seite 1 von 2 12 Letzte »

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •