Autor Beitrag
Dhakiyah
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 327
Erhaltene Danke: 5

Windows 7
Delphi XE2
BeitragVerfasst: Fr 24.10.14 19:03 
Ich habe in der MainForm folgendes stehen:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsFormsApplication1
{
    public partial class frm_main : Form
    {

        // Variablendeklaration
        private SqlConnection con = new SqlConnection("blablabla...");
        public static String s_artikel;
        public frm_main()
        {
            InitializeComponent();
        }

        private void cmd_neues_Click(object sender, EventArgs e)
        {
            frm_dlg_neue_suche frm = new frm_dlg_neue_suche();
            frm.Show(this);
        }

        public void Anzeigen()
        {
            
            string SQL1 = "select * from A";
            string SQL2 = "select * from B";
            SqlCommand cmd = new SqlCommand(SQL1, con);
            SqlCommand cmd1 = new SqlCommand(SQL2, con);
            SqlDataReader reader1, reader2;

            inp_nr.Text = s_artikel;
            con.Open();
                reader1 = cmd.ExecuteReader(); 
                while (reader1.Read())
                {
                    inp_menge1.Text = reader1["MENGE1"].ToString();
                    inp_menge2.Text = reader1["MENGE2"].ToString();
                }
                reader1.Close();

                reader2 = cmd1.ExecuteReader();
                while (reader2.Read())
                {
                    inp_a.Text = reader2["a1"].ToString() + " " + reader2["a2"].ToString();
                    inp_b.Text = reader2["b"].ToString();
                    inp_c.Text = reader2["c"].ToString();
                    inp_d.Text = reader2["d"].ToString();
                    inp_e.Text = reader2["e"].ToString();
                }
                reader2.Close();
            con.Close();
        }
    }
}


In der zweiten Form will ich durch DoubleClick auf ein DataGridView die ArtikelNr. an die MainForm schicken, damit diese dort angezeigt wird. Die Übergabe der ArtikelNr. funktioniert, aber er zeigt nichts an, obwohl er durch das Anzeigen() durchläuft beim debuggen...

In der zweiten Form steht folgendes:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
        private void fg_beschreibung_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            
            frm_main frm_main = new frm_main();
            frm_main.s_artikel = fg_beschreibung.Rows[e.RowIndex].Cells[0].Value.ToString();
            
            frm_main.Anzeigen();
            Close();
        }


Nicht wundern, habe Text rausgelöscht aus den SQL Statements etc.

Die Statements etc. funktionieren einwandfrei!
Wenn ich auf die Form1 beim ButtonClick Anzeigen machen, geht es.
Die ArtikelNr. wird auch übergeben!

_________________
Es ist soooo flauschig !!!
Dhakiyah Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 327
Erhaltene Danke: 5

Windows 7
Delphi XE2
BeitragVerfasst: Fr 24.10.14 19:29 
Ablauf ist folgender:
Ich öffne eine Artikelkarte (MainForm).
Danach klicke ich auf "Neue Suche".
Dann öffnet sich ein neues Fenster mit einem SuchenButton, einer Textbox und einem DataViewGrid.
Ich suche dann einen Artikel, das Ergebnis wird in die Tabelle geladen.
Beim Doppelklick auf die Tabelle soll die Artikelnummer an die MainForm übergeben werden (funktioniert).
Gleichzeitig soll das "SuchenFenster" geschlossen werden und in der Artikelkarte wird der Artikel mit seinen Eigenschaften angezeigt.

Nur dieses Anzeigen funktioniert nicht.

Lege ich auf die Main Form einen weiteren Button und hinterlege dort das Anzeigen(), geht es nach betätigen....

_________________
Es ist soooo flauschig !!!
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 24.10.14 19:48 
In deiner fg_beschreibung_CellDoubleClick Methode erzeugtst du ein neues frm_main. Das ist eine andere als die die gerade angezeigt wird.

Sauber wäre wenn du im CellDoubleClick einen Event wirfst denn die originale frm_main fängt und von dort dann die Anzeige aktualisiert. Dann brauch deine 2.te Form auch frm_main nicht kennen und bleibt universell einsetzbar.

Die billige Lösung wäre den übergeben Owner, denn hast du beim Show der Form übergeben, wieder auf die tatsächliche Form zu casten.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
private void fg_beschreibung_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    frm_main tmp = this.Owner as frm_main;
    if(tmp != null)
    {
        tmp.s_artikel = fg_beschreibung.Rows[e.RowIndex].Cells[0].Value.ToString();            
        tmp.Anzeigen();
    }
    Close();
}


PS: Wenn ich mir was wünschen darf bitte das C# Namensschema angewöhnen. Typen in Groß, Methoden in groß, Variablen in klein. Und niemals nicht Unterstriche sondern Dinge in CamelCase bzw. in PascalCase benamsen.
Dhakiyah Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 327
Erhaltene Danke: 5

Windows 7
Delphi XE2
BeitragVerfasst: Mo 27.10.14 09:29 
Moin!
Habe das ganze mal grade ausprobiert...
Jetzt liefert tmp aber NULL zurück... Woran kann das liegen?

Wegen dem Wunsch, ich versuchs mal. :lol:

_________________
Es ist soooo flauschig !!!
Dhakiyah Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 327
Erhaltene Danke: 5

Windows 7
Delphi XE2
BeitragVerfasst: Mo 27.10.14 09:41 
Hab´s jetzt so gelöst:

In der Main form stehen folgende Sachen:


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
        public static String s_artikel;

        private void cmd_neues_Click(object sender, EventArgs e)
        {
            frm_dlg_neue_suche frm = new frm_dlg_neue_suche();
            frm.ShowDialog();
            Anzeigen();
        }


In der Form2 folgendes:


ausblenden C#-Quelltext
1:
2:
3:
       frm_main.s_artikel = fg_beschreibung.Rows[e.RowIndex].Cells[0].Value.ToString();

       Close();


Jetzt weiß ich nicht, ob das eine "schöne" Lösung ist...
Was meint ihr?

_________________
Es ist soooo flauschig !!!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 27.10.14 10:21 
Hallo Dhakiyah,

nein, das ist keine schöne Lösung, denn ein aufgerufenes Formular sollte nicht den Aufrufer direkt kennen.

Auch wenn es viel Text ist, aber lies dir mal (in Ruhe) meinen Artikel zur Kommunikation von 2 Forms (Stichworte: Eigenschaften und Ereignisse) durch.