swonson Geschrieben 23. August 2011 Geschrieben 23. August 2011 Hallo Leute, ich habe folgendes Problem, ich arbeite an einem Programm, welches zur Verwaltung von Personen dient. Damit ich nicht immer wieder neue Fenster öffnen muss, möchte ich, dass Funktionen wie "Person editieren" und so in einem TabControl auf meiner Hauptform geöffnet wird. Also wenn man eine Funktion anklickt soll ein neuer Tab hinzugefügt werden der bestimmte Controls enthält. Es ist aber darauf zu achten, das "Person editieren" natürlich ganz andere Controls hat als "Zeige mir alle Personen". Ich habe es so versucht: private void Build_Hed() { // // TB_Bemerkung // TextBox TB_Bemerkung = new System.Windows.Forms.TextBox(); TB_Bemerkung.Location = new System.Drawing.Point(10, 252); TB_Bemerkung.Multiline = true; TB_Bemerkung.Name = "TB_Bemerkung"; TB_Bemerkung.Size = new System.Drawing.Size(440, 117); TB_Bemerkung.TabIndex = 27; // // label12 // Label label12 = new System.Windows.Forms.Label(); label12.AutoSize = true; label12.Location = new System.Drawing.Point(7, 236); label12.Name = "label12"; label12.Size = new System.Drawing.Size(94, 13); label12.TabIndex = 26; label12.Text = "Bemerkung (300): "; // // label11 // Label label11 = new System.Windows.Forms.Label(); label11.AutoSize = true; label11.Location = new System.Drawing.Point(7, 201); label11.Name = "label11"; label11.Size = new System.Drawing.Size(64, 13); label11.TabIndex = 25; label11.Text = "Geb. Datum"; .....etc... // // Zur TabPage adden // tabPage1.Controls.Add(TB_Bemerkung); tabPage1.Controls.Add(label12); tabPage1.Controls.Add(label11); } Soweit klappt es auch, nur daran ist nichts dynamisch -.- Ich möchte ja ein neuen Tab öffnen und die oben genannten Controls in den neuen Tab schreiben, aber wenn ich das versuchen geht es nicht, da beim Compilieren dieser Tab noch nichts existiert. Das folgende geht also nicht da "Person_edit" ja noch garnihct existiert. // // Zur TabPage adden // tabControl1.TabPages.Add("Personen_edit"); Personen_edit.Controls.Add(TB_Bemerkung); Personen_edit.Controls.Add(label12); Personen_edit.Controls.Add(label11); Ich hoffe ich konnte mich klar genug ausdrücken und hoffe das mir jemand helfen kann. Schönen Abend noch... greetz Swonson Zitieren
Gateway_man Geschrieben 24. August 2011 Geschrieben 24. August 2011 Hi, du kannst es wie folgt machen. private void AddTapDynamicToTabControl1() { System.Windows.Forms.TabPage npage = new TabPage(); npage.Text = "new page"; //andere Controls der Tappage adden Button btn1 = new Button(); btn1.Location = new Point(10, 10); btn1.Text = "button1"; npage.Controls.Add(btn1); //Page dem jeweiligen TabControl hinzufügen tabControl1.TabPages.Add(npage); } lg Gateway Zitieren
HJST1979 Geschrieben 24. August 2011 Geschrieben 24. August 2011 (bearbeitet) Hi eine andere Möglichkeit wäre, wenn du dir für JEDES Tabpane ein Steuerelement schreibst, dann hättest den Vorteil, dass du beim Erstellen des Steuerelements die anderen Elemente (wie Textfelder) "draufziehen" kannst. Anschließend kannst das neue Steuerelement einfach deiner TabControl hinzufügen. Der nächste Vorteil ist auch, dass du das Steuerelement unter Umständen öfter verwenden kannst. Gruß Hans-Jörg Bearbeitet 24. August 2011 von HJST1979 Zitieren
swonson Geschrieben 24. August 2011 Autor Geschrieben 24. August 2011 Super Gateway_man, das klappt schon mal sehr gut. Nun frage ich mich, wie kann ich dem Button den ich eben auf den Tab gebastelt habe, eine Funktion zuweisen? Gleiches Problem, das der Button nicht existiert kommt natürlich ein Fehler. Danke für die Antwort Hans-Jörg, wie könnte das denn aussehen? greetz Swonson Zitieren
Gateway_man Geschrieben 24. August 2011 Geschrieben 24. August 2011 (bearbeitet) private void AddTapDynamicToTabControl1() { System.Windows.Forms.TabPage npage = new TabPage(); npage.Text = "new page"; //andere Controls der Tappage adden Button btn1 = new Button(); btn1.Location = new Point(10, 10); btn1.Text = "button1"; //du must das entsprechende Event registrieren (sprich einer Funktion zuweisen). btn1.Click += new EventHandler(btn1_Click); npage.Controls.Add(btn1); //Page dem jeweiligen TabControl hinzufügen tabControl1.TabPages.Add(npage); } private void btn1_Click(object sender, EventArgs e) { //hier der code für button click event Button curr = (Button)sender; MessageBox.Show("button=" + curr.Text); } Bearbeitet 24. August 2011 von Gateway_man Zitieren
swonson Geschrieben 24. August 2011 Autor Geschrieben 24. August 2011 Sehr geil danke dir Gateway_man! Zitieren
swonson Geschrieben 25. August 2011 Autor Geschrieben 25. August 2011 Hallo, entschuldigt bitte, dass ich diese Thread wieder nutzen muss. Ich habe eigentlich ein ähnliches Problem wie vorher. Ich hab es die ganze Nacht versucht selber zu lösen, habe es aber leider nicht hinbekommen... Ich möchte bei Knopfdruck meine Ausgefüllten Textboxen in eine DB schreiben, aber wieder das gleiche Problem, sie existieren ja nicht. Ich hab rum probiert aber es geht irgendwie nicht... mein DB code sieht so aus: string dataSource = "db.db"; SQLiteConnection connection = new SQLiteConnection(); connection.ConnectionString = "Data Source=" + dataSource; connection.Open(); SQLiteCommand command = new SQLiteCommand(connection); //Einfügen eines Test-Datensatzes. command.CommandText = "INSERT INTO TB_Halter (Nachname, Vorname, Titel) VALUES ('" + textBox1.Text + "', '" + textBox2.Text + "', '" + textBox3.Text + "')"; command.ExecuteNonQuery(); //Freigave der Ressourcen. command.Dispose(); connection.Close(); connection.Dispose(); MessageBox.Show("Erfolgreich!"); this.Close(); Der Code zum einfügen geht einwandfrei... der einzige Fehler ist, das die Textboxen ja garnicht existent sind.... (bitte ignoriert Syntaxfehler im InsertCode, kann sein das sie durchs kürzen hängen geblieben sind...) Ich hoffe mir kann jemand helfen Danke im voraus und bis späder. greetz swonson Zitieren
Gateway_man Geschrieben 25. August 2011 Geschrieben 25. August 2011 Hi, nur mal ein gut gemeinter Ratschlag. Das mit dem dynamischen erstellen würde ich erstmal nicht so machen, da du ja scheinbar noch nicht allzuviel Erfahrung gesammelt hast und es momentan doch sehr unsauber aussieht. Ich könnte dir zwar eine Lösung anbieten, allerdings halte ich diese selbst für extrem unsauber. Warum machst du es nicht einfach so, das du für das anzeigen, bearbeiten,neuanlegen seperate masken im designer erstellst. Diese dann per Visible Property versteckst und zu rechten Zeit wieder sichtbar machst. Ich denke damit wärst du besser bedient. Denn wenn du es dynamisch machen willst dann würde ich dir auch das schreiben einer Steuerung wie von HJST1979 vorgeschlagen empfehlen. Aber ich werd jetzt schnell eine Lösung zeigen, die ich wie gesagt selbst nicht so super finde das es eben jedesmal auf neue einen gewissen Rechenaufwand benötigt. Vorraussetzung hierfür ist, das du den Code generierten Controls einen namen zugewiesen hast. private void SQLExecute(){ //textboxes local erfassen TextBox textbox1 = (TextBox)this.Controls["textbox1"]; TextBox textbox2 = (TextBox)this.Controls["textbox2"]; TextBox textbox3 = (TextBox)this.Controls["textbox3"]; //this.Controls[ControlName hier als string übergeben"] //statt this.Controls must du unter umständen den namen des Containers, wecher //die Textboxen beinhaltet schreiben. Zum Beispiel Tabpage1.Controls (wenn die //Tabpage1 die Textboxen beinhaltet) string dataSource = "db.db"; SQLiteConnection connection = new SQLiteConnection(); connection.ConnectionString = "Data Source=" + dataSource; connection.Open(); SQLiteCommand command = new SQLiteCommand(connection); //Einfügen eines Test-Datensatzes. command.CommandText = "INSERT INTO TB_Halter (Nachname, Vorname, Titel) VALUES ('" + textbox1.Text + "', '" + textbox2.Text + "', '" + textbox3.Text + "')"; command.ExecuteNonQuery(); //Freigave der Ressourcen. command.Dispose(); connection.Close(); connection.Dispose(); MessageBox.Show("Erfolgreich!"); this.Close(); } lg Gateway Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.