C# 在c中删除带有MouseClick事件的GroupBox#

C# 在c中删除带有MouseClick事件的GroupBox#,c#,winforms,groupbox,C#,Winforms,Groupbox,我正在以编程方式创建包含删除按钮的GroupBox。我想通过btnSil\u Click事件,在单击这些按钮时删除分组框 以下是我迄今为止在加载表单中的代码: for (i=0;i<AnaEkranForm.n1;i++) { GroupBox gBKisaMetin = new GroupBox(); this.Controls.Add(gBKisaMetin); gBKisaMetin.Location = new Point(80, gYuksek);

我正在以编程方式创建包含删除按钮的GroupBox。我想通过
btnSil\u Click
事件,在单击这些按钮时删除分组框

以下是我迄今为止在加载表单中的代码:

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);
}

但这不起作用,因为我无法访问
gBkisaMetin
。我如何才能让它工作?

因此,由于GroupBox是delete按钮的父项,因此您应该能够像下面这样非常简单地访问它:

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

这会将发送者强制转换为按钮,然后通过属性访问父控件(GroupBox)。然后可以操作GroupBox。

创建GroupBox时,还可以在按钮的
标记中存储对GroupBox的引用:

Button btnSil = new Button();
btnSil.Tag = gBKisaMetin;
现在,您可以在单击处理程序中检索该引用:

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
}

此方法的不同之处在于,按钮不需要位于分组框内,即可工作。

请通过编辑向问题添加更多信息。你有什么问题吗?有些东西不起作用了吗?请添加一个问题供其他人回答。你说得对。我编辑了问题。你发布的代码不完整,因此很难理解,尤其是外语变量名。最好是发布一个更完整的代码示例,说明您当前拥有的代码,以及您迄今为止为使其实现所需而尝试的内容。private void btnSilÜu Click(object sender,EventArgs e){this.Controls.Remove(gBKisaMetin);gBKisaMetin.Dispose();}@CanerÜinver最好在您的问题正文中。
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
}