Form abgeleitet, Problem mit Komponenten die sich auf abgeleiteter befinden
-
Hallo,
ich habe zum Test, aus einer Form1, welche nur einen Button enthält, eine Klasse abgeleitet...funktinoert auch!
Nun habe ich in der abgeleiteten Form noch einen extra Button gesetzt (per Designer), jedoch wird dieser nicht angezeigt, was mache ich falsch!
UNd noch eine Frage, wie kann ich das Event, welches bei der Baseform dem Button zugeordnet ist, für die SubForm überschreiben? Sodass der Butotn auf der SubFom was andren macht, als der auf der Baseform??
Code
BaseFom:using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Test; namespace Ereignisse_einer_Form { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { DialogResult dr = MessageBox.Show("Soll wirklich beendet werden?", "Beenden", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (dr == DialogResult.Yes) e.Cancel = false; else e.Cancel = true; } private void button1_Click(object sender, EventArgs e) { SubForm sF = new SubForm(); //das ist die abgeleitete Form sF.Show(); } } }
Abgeleitete Form
using Ereignisse_einer_Form; using System.Windows.Forms; namespace Test { class SubForm : Form1 { private Button button1; private void InitializeComponent() { this.button1 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // button2 // this.button2.Location = new System.Drawing.Point(190, 35); // // button1 // this.button1.Location = new System.Drawing.Point(241, 76); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(75, 23); this.button1.TabIndex = 0; this.button1.Text = "button1"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click_1); // // SubForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.ClientSize = new System.Drawing.Size(624, 355); this.Controls.Add(this.button1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; this.Name = "SubForm"; this.Controls.SetChildIndex(this.button2, 0); this.Controls.SetChildIndex(this.button1, 0); this.ResumeLayout(false); } private void button1_Click(object sender, System.EventArgs e) { MessageBox.Show("TEST"); } } }
so, und der button1 wird nicht angezeigt, nur der button von der BaseForm!
Was amche ich falsch?
-
Du must die übergeordnete Komponente auf die Du den button1 setzt auf public setzen.
-
???
also
public class SubForm:Form1 ?? (hab ich grad gemacht, geht trotzdem nicht)
oder was meinst du?
-
Den Button kannst Du protected machen wenn Du noch Zugriff aus der erbenden Form benötigst (eventuell mach ein Property draus!)
Die Klick Methode kannst Du virtual machen und in der erbenden Form überschreiben. (Du kannst auch die Eventlisten bearbeiten)
-
ok, mit virtuell und überschreiben klappt nun, aber warum wird der button den ich per designer draufgezogen habe nicht angezeigt??
und kannst du mir das mit den eventlisten etwas genauer erklären bitte?
-
Warum der Knopf bei Dir fehlt kann ich Dir nicht sagen.
Die Eventlisten:
Der Knopf hat ja nen Multidelegaten in dem die Ereignise eingetragen werden.
Du erbst von Form1 also wird das Ereignis von Form1 in die Liste eingetragen. Wenn Du dann im Designer einfach ein Doppelklick machst, wird ein weitere Delegat der Liste hinzugefügt. Hier könntest Du Eingreifen in dem Du vor der Eintragung des 2. Delegaten den ersten löschst.Welche der Varianten besser ist hängt vom Aufwand / Zweck bzw. Ziel ab.
-
ok, das hab ich auch verstanden!
Aber zu dem button nochmal!
Ich habe eine Form abgeleitet, der Designer erkennt das, und macht mir auch eine neue Oberfläche für die abgeleitete form auf!
Alle komponenten von der baseform sind enthalten!
Ich ziehe nun einen button auf die abgeleitete form, kompiliere, starte, der button wird nicht angezeigt!
Habe ich bei der reihenfolge was falsch gemacht oder was wichtiges vergessen? Oder geht es so garnicht?
-
Versuchs doch mal mit debuggen und schau in button1 auf Visible (muß true sein), Location(muß innerhalb der grenzen von SubForm.Size sein) und Parent (muß die SubForm sein). Wenn alles zutrifft müsste der button auch zu sehen sein.