如何通过单击按钮将列表框数据从form1传递到form2

时间:2016-01-28 06:18:29

标签: c# winforms listbox

我有两个Windows窗体。我已从数据库中读取数据并将数据加载到Sub GetSpecialFolderPath() Dim objSFolders As Object Dim MyPath As String Set objSFolders = CreateObject("WScript.Shell").SpecialFolders MyPath = objSFolders("mydocuments") Dim FSO As Object Set FSO = CreateObject("scripting.filesystemobject") MyPath = .Range("B2").Value If Right(MyPath, 1) = "\" Then MyPath = Left(MyPath, Len(MyPath) - 1) End If If FSO.FolderExists(MyPath) = False Then MsgBox MyPath & " doesn't exist" Exit Sub End If end sub 上的Listbox1。现在我想要的是,当用户从Form1(FrmSelection) Listbox1上选择一个值并单击处理按钮时,必须在Form1上加载所选值。我尝试了不同的例子但是没有让它发挥作用。以下是以下步骤

1.运行申请

2.FrmSelection打开空列表框,然后单击进程按钮打开FrmSelection

3.FrmSelections打开,此表单包含一个列表框和我从数据库中读取的数据。

4.从列表框中选择一项

5.在FrmSelections上从列表框中选择项目后,单击Addforms按钮。

  1. 所选项目必须出现在FrmProcessorder列表框中。
  2. 问题 - 在选择项目后未单击“添加表单”按钮时,FrmProcessor表单上出现错误(对象未设置为对象实例)

    这是我的代码。

    Form1中(FrmSelection)

    Form2(FrmProcessOrder) Listbox2

    表格2(FrmProcessOrder)

        public partial class FrmProcessOrder : Form
    {
    
        public FrmProcessOrder()
        {
            InitializeComponent();        
        }
        private void btnProcess_Click(object sender, EventArgs e)
        {
            Program._FrmSelection = new FrmSelection();
            Program._FrmSelection.Show();
        }
    
        public void AddList(ListBox _Listing)
        {
            ListBoxForms.Items.AddRange(_Listing.Items); 
        }
    }
    

3 个答案:

答案 0 :(得分:1)

编辑(编辑问题后):

检查一下:

FrmProcessOrder _FrmProcessOrder; //没有声明对象

private void btnAddForms_Click(object sender, EventArgs e)
{
    _FrmProcessOrder.AddList(ListBoxSelection);  // This is null exception
    _FrmProcessOrder = new FrmProcessOrder(); //it should not be put here
}

在正确初始化之前使用_FrmProcessOrder。这样做:

FrmProcessOrder _FrmProcessOrder = new FrmProcessOrder(); //Now it is declared, only once

private void btnAddForms_Click(object sender, EventArgs e)
{
    _FrmProcessOrder.AddList(ListBoxSelection);  // Now it should be ok
}

<强>原始

最简单的方法之一是将输入作为字段(或创建方法调用来实现),而不是作为构造函数参数。

改变这个:

public FrmProcessOrder(ListBox _List)
{
    InitializeComponent();
    ListBoxForms2.Items.AddRange(_List.Items);         
}

进入这个

public FrmProcessOrder()
{
    InitializeComponent();
}

public void AddList(ListBox _List){
    ListBoxForms2.Items.AddRange(_List.Items);         
}

然后,当您需要时可以调用Form方法

_FrmProcessOrder.AddList(listBox);

答案 1 :(得分:0)

在这一行

Application.Run(new FrmProcessOrder());

您尝试实例化一个新的FrmProcessOrder,但是您有一个这样的构造函数:

public FrmProcessOrder(ListBox _List)

因此您无法在没有参数ListBox的情况下进行实例化。 如果你想要这个,你必须添加到Form1空构造函数:

public FrmProcessOrder()
{

}

答案 2 :(得分:0)

我相信你错误地复制了代码块(交换了Form2&amp; Form1)。

此行Application.Run(new FrmProcessOrder());应替换为Application.Run(new FrmSelection());,这将从数据库加载数据。

您看到的编译错误是因为您没有空构造函数。根据当前代码,要实例化'FrmProcessOrder',您必须提供ListBox的实例。

相关问题