在现有的第一种形式中使用弹出式表单的功能

本文关键字:弹出式 功能 表单 一种 | 更新日期: 2023-09-27 18:17:38

我不知道如何正确地做到这一点。

基本的是,我有一个表单,用于填写各种数据,我保存在2个列表。第二个表单是通过菜单选项调用的表单,菜单选项显示所有当前数据的概述。它像这样打开:

private void OpenOverviewForm()
{
    Overview formOverview = new Overview();
    for (int i = 0; i < callListNL.Count; i++)
    {
        ListViewItem item = new ListViewItem(callListNL[i].Opco);
        item.SubItems.Add(callListNL[i].UserID);
        item.SubItems.Add(callListNL[i].Email);
        item.SubItems.Add(callListNL[i].Title);
        formOverview.listView1Overview.Items.Add(item);
    }
    for (int i = 0; i < callListPL.Count; i++)
    {
        ListViewItem item = new ListViewItem(callListPL[i].Opco);
        item.SubItems.Add(callListPL[i].UserID);
        item.SubItems.Add(callListPL[i].Email);
        item.SubItems.Add(callListPL[i].Title);
        formOverview.listView1Overview.Items.Add(item);
    }
    formOverview.StartPosition = FormStartPosition.CenterScreen;
    formOverview.Show();
}

在这个新表单中,有一个列表视图,其中包含所有保存的日志。我想要的是最终用户能够双击其中一个条目,然后关闭第二个表单并显示他们在第一个表单上选择的数据。为了做到这一点,我需要能够使用listview的双击事件来提供项目的索引,他们已经双击到我的功能之一,存在于第一种形式。然而,我找不到一种方法来获得我的功能从Form1识别在我的Form2。

我知道这是可能的:

public partial class Overview : Form
{
    public Overview()
    {
        InitializeComponent();
    }
    private void listView1Overview_DoubleClick(object sender, EventArgs e)
    {
        Form1 newform = new Form1();
        newform.OverviewFormDisplay(listView1Overview.SelectedIndices[0]);
    }
}

但是由于这段代码实际上创建了我的原始表单的一个全新的实例,我不认为这是可用的。还是我错了?

在现有的第一种形式中使用弹出式表单的功能

为你的主表单实例创建一个变量
并以引用Form1为参数添加Overview的构造函数

public partial class Overview : Form
{
    private Form1 _mainForm;
    public Overview(Form1 mainform) : this()
    {
        this._mainForm = mainForm;
    }
    private void listView1Overview_DoubleClick(object sender, EventArgs e)
    {
        this._mainForm.OverviewFormDisplay(listView1Overview.SelectedIndices[0]);
    }
}

然后你可以在你的Overview表单中使用Form1实例的所有public属性和方法

创建Overview表单实例时,将主表单的引用传递给构造函数

//.....this line must be in the Form1
Overview formOverview = new Overview(this);
//....

您也可以通过在Overview表单中创建一个Property来解决这个问题:

public partial class Overview : Form
{
    public Overview()
    {
        InitializeComponent();
    }
    private ListViewItem lvi;
    public ListViewItem SelectedItem
    {
        get
        {
            return lvi;
        }
        set
        {
            lvi = value;
        }
    }
    private void listView1Overview_DoubleClick(object sender, EventArgs e)
    {
        SelectedItem = listView1Overview.SelectedItems[0];
        Close();
    }
}

你必须编辑创建formOverview的代码,使其看起来像这样:

private void OpenOverviewForm()
{
    Overview formOverview = new Overview();
    for (int i = 0; i < callListNL.Count; i++)
    {
        ListViewItem item = new ListViewItem(callListNL[i].Opco);
        item.SubItems.Add(callListNL[i].UserID);
        item.SubItems.Add(callListNL[i].Email);
        item.SubItems.Add(callListNL[i].Title);
        formOverview.listView1Overview.Items.Add(item);
    }
    for (int i = 0; i < callListPL.Count; i++)
    {
        ListViewItem item = new ListViewItem(callListPL[i].Opco);
        item.SubItems.Add(callListPL[i].UserID);
        item.SubItems.Add(callListPL[i].Email);
        item.SubItems.Add(callListPL[i].Title);
        formOverview.listView1Overview.Items.Add(item);
    }
    formOverview.StartPosition = FormStartPosition.CenterScreen;
    formOverview.ShowDialog();
    if (formOverview.SelectedItem != null)//just in case the user closes formOverview without double-clicking any item
    {
        OverviewFormDisplay(formOverview.SelectedItem);
    }
}

如果你不想让你的formOverview在每次用户双击一个项目来执行你想要的功能时关闭,这可能不是最好的方法,但它确实在工作。希望能有所帮助:)