关闭使用eventandler生成的win form代码

本文关键字:win form 代码 eventandler | 更新日期: 2023-09-27 18:19:21

如何在双击列表框项时关闭代码生成的表单。

我的代码

    private void btn_batchList_Click(object sender, EventArgs e)
    {
        string[] batchList = BACH_Outward.GetOutBatchList(txtBranchId.Text, dtpHouseDt.Value.ToString("dd/MM/yyyy"), cmbCLRTYPE.SelectedValue.ToString(), "T");
        if (batchList == null)
        {
            return;
        }
        Form form = new Form();
        form.FormBorderStyle = FormBorderStyle.FixedDialog;
        form.MaximizeBox = false;
        form.MinimizeBox = false;
        form.Size = new Size(150, 325);
        form.StartPosition = FormStartPosition.Manual;
        form.Location = new Point(this.Right - 200, this.Top + 100);
        form.Opacity = 50;
        form.Text = "Batch List";
        form.Move += new System.EventHandler(this.OnMove);
        ListBox BatchList = new ListBox();
        BatchList.Size = new System.Drawing.Size(140, 315);
        form.Controls.Add(BatchList);            
        BatchList.DataSource = batchList;
        BatchList.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listBox_MouseDoubleClick);
        form.ShowDialog();
    }
private void listBox_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        ListBox listBox = (ListBox)sender;
        if (listBox.SelectedIndex != -1)
        {
            var rect = listBox.GetItemRectangle(listBox.SelectedIndex);
            if (rect.Contains(e.Location))
            {
                // process item data here
                TxtBatchNo.Text = listBox.SelectedValue.ToString();
//want to close the popup form here.
            }
        }
    }

现在我想关闭弹出表单时,用户双击一个项目的列表框。

关闭使用eventandler生成的win form代码

必须在两个方法都可以访问的范围内声明form对象。然后调用form.Close()方法,或者如果以后需要显示它,则将可见性更改为hidden。

您可以通过获取对Form对象的引用并在其上调用Close()来关闭窗口:

((Form)listBox.TopLevelControl).Close();

然而,我强烈建议在你的项目中创建一个新的表单,这样它就是它自己的类,并封装了它自己的所有逻辑。似乎您正在直接从另一个表单中创建Form对象,并将两个表单的逻辑混合在一起。

这就是闭包可以发挥作用的地方。只需关闭表单。

 BatchList.MouseDoubleClick += (sender, args) => {
   if (someCondition) {
     form.Close();
   }
 }