我有一个表格,可以提取数据、处理数字、做事。它完美地工作。
问题是代码是我一次只能访问一个市场,我希望能够访问多个市场。
假设我可以复制当前的表格 x 4,所以在我登录后,我可以访问 4 个市场,而不是 1 个。但是代码有点密集,而且我会坚持使用我硬连线的许多表格,而不是具有复制初始形式的灵活性,然后进入另一个市场。
实现这一点的最简单和最快的方法是使用一些代码来“弹出”现有表单的克隆,如果这样的话是可能的。
如果我了解您所追求的,您想要这样的东西(第一部分与“迈克尔的”答案非常相似):
在表格中:
Public MarketCOde As String ' whatever it is.
Public Sub New(mktCode As String)
' leave this line alone
InitializeComponent
MarketCOde = mktCode
End sub
现在,表单中的代码需要知道它在哪个市场工作的任何地方,它都可以引用MarketCode
.
要创建用于新市场的表单:
Dim frmAsia As New FORMNAME("ASIA")
由于表单需要一个市场代码,我们在创建表单时传递它。我们不是克隆表格,而是创建一个表格instance
以适应不同但特定的市场。现在,请继续阅读,因为这是个坏消息:
如果所有代码都嵌入到表单中,则必须将其重构为引用 MarketCode,而不是现在可能存在的硬编码引用。接下来,您的应用程序需要一种新的启动方式,因为主窗体不会从 VB 获取关键的 MktCode arg。
最好的办法是添加一个市场选择器表单,并将其作为项目属性中的启动表单。添加按钮以创建您需要的每个新市场形式:
' this is a new button on a new form to make Market Form instances.
Sub button1_click......
' USE THE ACTUAL FormName from your code!
Dim frmCentral as New FORMNAME("CENTRAL")
frmCentral.Show
End Sub
' each button makes a new market form,
Sub button2_click...... ' NOTE: Btn 2!
' the FormName from your code
Dim frmAsia as New FORMNAME("ASIA")
frmAsia.Show
End Sub
一键一表单实例名一市场
这也是启动第一个的启动形式。请务必在项目属性中将其设置为启动表单。
您可以在 MarketForm 上创建可以在外部设置的属性,以便每个实例与特定市场相关。我使用过 MarketName,但您必须弄清楚在您的情况下什么是有意义的。
在 MarketForm 的代码中创建类似这样的内容(您需要修改现有代码以使用它,而不是当前选择市场)
Public Property MarketName As String
使用面向对象的编程很容易创建任何对象的不同实例(在这种情况下为 Form)。
Dim myMarketForm1 As New MarketForm
myMarketForm1.MarketName = "Eastern"
myMarketForm1.Show()
Dim myMarketForm2 As New MarketForm
myMarketForm2.MarketName = "Central"
myMarketForm2.Show()
`... and so on
我怀疑你可能正在寻找的是这个......
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim frm As New Form1
frm.Show()
End Sub
在这个例子中,当Button1
被点击时,它会创建一个副本Form1
并显示它。可以多次单击该按钮以生成Form1
. 按钮甚至可以放在Form1
自身上。