2017-10-29 4 views
-1

Ich programmiere programmgesteuert GroupBoxen, die Löschschaltflächen enthalten. Ich möchte die GroupBoxen löschen, wenn diese Schaltflächen über das Ereignis btnSil_Click angeklickt werden.Löschen einer GroupBox mit MouseClick-Ereignis in C#

Hier ist der Code ich in form_load bisher haben:

for (i=0;i<AnaEkranForm.n1;i++) 
{ 
    GroupBox gBKisaMetin = new GroupBox(); 
    this.Controls.Add(gBKisaMetin); 
    gBKisaMetin.Location = new Point(80, gYuksek); 
    gYuksek += 200; 
    gBKisaMetin.Text = "Soru " + (soruSayac++); 
    gBKisaMetin.Width=500; 

    gBKisaMetin.Height = 150; 

    TextBox tBSoru = new TextBox(); 
    tBSoru.Location = new Point(30, 30); 
    tBSoru.Width = 400; 
    gBKisaMetin.Controls.Add(tBSoru); 

    Label labelCevap = new Label(); 
    labelCevap.Location = new Point(30, 70); 
    labelCevap.Text = "Cevap"; 
    gBKisaMetin.Controls.Add(labelCevap); 

    TextBox tBKisaMetinCevap = new TextBox(); 
    tBKisaMetinCevap.Location = new Point(30, 95); 
    tBKisaMetinCevap.Width = 400; 

    gBKisaMetin.Controls.Add(tBKisaMetinCevap); 
    tBKisaMetinCevap.ReadOnly = true; 

    Button btnSil = new Button(); 
    btnSil.Location = new Point(460, 10); 
    btnSil.Width = 30; 
    btnSil.Text = "Sil"; 
    btnSil.Name = "btnSil_" + i.ToString(); 
    btnSil.Click += new EventHandler(btnSil_Click); 

    gBKisaMetin.Controls.Add(btnSil); 
} 

AnaEkranForm.n1 ist die Anzahl der Groupboxes, die erstellt wird.

Und hier ist meine Schaltfläche Click-Handler zum Löschen:

private void btnSil_Click(object sender, EventArgs e) 
{ 
    this.Controls.Remove(gBKisaMetin); 
    gBKisaMetin.Dispose(); 
} 

Aber das funktioniert nicht, weil ich nicht gBkisaMetin zugreifen kann. Wie kann ich das zur Arbeit bringen?

+0

Fügen Sie weitere Informationen zu der Frage hinzu, indem Sie sie bearbeiten. Mit was hast du Probleme? Funktioniert etwas nicht? Bitte fügen Sie eine Frage für andere hinzu. –

+0

Sie richtig.Ich bearbeite die Frage –

+0

Der Code, den Sie gebucht haben, ist nicht vollständig und so ist es schwer zu verstehen, vor allem mit den Fremdsprachenvariablen Namen. Es ist vielleicht am besten, wenn Sie ein vollständigeres Beispiel des Codes, den Sie derzeit haben, veröffentlichen und was Sie bis jetzt versucht haben, um zu erreichen, was Sie wollen. –

Antwort

0

So seit dem GroupBox ist die Mutter der Löschen-Taste, sollten Sie in der Lage sein, es so sehr einfach zuzugreifen:

private void btnSil_Click(object sender, EventArgs e) 
{ 
    Control groupBox = ((Button)sender).Parent; 
    this.Controls.Remove(groupBox); 
    groupBox.Dispose(); 
} 

Diese den Sender an einen Knopf wirft, greift dann auf die übergeordnete Steuerung (die GroupBox) über die Eigenschaft Parent. Die GroupBox kann dann manipuliert werden.

0

Sie auch einen Verweis auf die GroupBox in der Tag Eigentum Ihrer Taste speichern können, wenn Sie es schaffen:

Button btnSil = new Button(); 
btnSil.Tag = gBKisaMetin; 

Jetzt können Sie diese Referenz in der Click-Handler abrufen:

private void btnSil_Click(object sender, EventArgs e) 
{ 
    Button btn = (Button)sender; 
    GroupBox gb = (GroupBox)btn.Tag; 
    gb.Dispose(); // will automatically remove it as well 
} 

Dieser Ansatz unterscheidet sich dadurch, dass der Button nicht innerhalb der GroupBox sein muss, damit dies funktioniert.