我有两个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按钮。
问题 - 在选择项目后未单击“添加表单”按钮时,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);
}
}
答案 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的实例。