导航
  • 主页
  • VBS
  • .NET技术
  • VBA
  • VB网络编程
  • VB多媒体
  • VB数据库
  • VB控件
  • VB COM/DCOM
  • VB基础类
  • VB API
  • 问答

求??如何在一个form1中操作form2中的控件。

Intel8088 2005-01-10 03:04:06
如何在一个form1中操作form2中的控件。
...全文
264 点赞 收藏 24
写回复
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
Paradise_heida 2005-01-11
明白你的意思了,按照以下方法就能解决你的问题:

首先,把Form1里的windows自动生成的代码打开,找到定义ListView的那个语句,应该是这句:

Friend WithEvents ListView1 As System.Windows.Forms.ListView

把这句话改成:

Public Shared WithEvents ListView1 As System.Windows.Forms.ListView

这是第一步。

然后在Form2里定义实例化Form1的对象的时候这样定义:

Public Shared frm1 As New Form1

记住,要定义全局的,不要在Click事件的Sub里定义。

然后在Form2里写:

Public Class Form2

Inherits System.Windows.Forms.Form

Public Shared frm1 As New Form1

'Public frm1 As New Form1 <--- 这个是原来的,不要了,要上面那句定义。

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

frm1.ListView1.Items.Add("XXX")

'frm1.ListView1.Items(0).SubItems.Add("xxx")

End Sub

End Class

在Form1里写那个让Form2弹出的Click的Sub就行了:

Public Class Form1

Inherits System.Windows.Forms.Form

Public frm1 As New Form2

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
frm2.Show()
End Sub

End Class

回复
Intel8088 2005-01-11
谢谢大家的回答。
我把我的问题写详细一点。
我有2个表单(form1,form2),form1中有一listview控件。然后在form1中:
代码:
在表单form1中:
public class form1
Private Sub butNewGroupID_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles butNewGroupID.Click
dim oForm as new form2
oForm.Show() '显示表单form2
End Sub
End class

然后在表单form2(注:此时form1,form2都是运行的,当然不能在form2中再建一个form1的实例)
public class form2
要在这里(表单form2)操作form1.listview的代码
end class

谢谢!



回复
doggodwu 2005-01-11
dim oForm as new form2

oForm.listview1.Items.Add("xxx")

oForm.Show()
回复
Intel8088 2005-01-11
兄弟你不会照葫芦画瓢啊?
服!
----------------------------------------------------------
兄弟请听我道来:
--------------------------------
Public Class Form2
Inherits System.Windows.Forms.Form

Public frm1 As New Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
frm1.Show()
End Sub

这是在form2中实例化form1并show
------------------------------------------

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
frm1.Activate()
frm1.ListView1.Items.Add("XXX")
'frm1.ListView1.Items(0).SubItems.Add("xxx")

End Sub
这是在form2中操作form1
照这样是行。但没有满足我的要求。
------------------------------------
请看我的代码:
public class form1
Private Sub butNewGroupID_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles butNewGroupID.Click
Dim oForm As New form2()
oForm.Show()
End Sub
end class

public class form2
我要的是在这里操作form1.listview的代码
end class
回复
ljb198102 2005-01-11
这个问题属于实例之间的互操作问题

对于这些类的对象都属于引用类型的

如果想在其中实例Form1中操作另一个实例Form2,你必须得把实例Form2的对象变量传给Form1中
才能在Form1的Methord中操作Form2
class Form1:Form{
......
private void MyMethord(Form2 fr){
fr.a ="就是这个样子调用!你明白了吗?";
fr.a+="不明白的话给我Mail:yeling2@163.net";
}
}
class Form2:Form{
public string a;
......
}
回复
Paradise_heida 2005-01-11
Public Class Form2
Inherits System.Windows.Forms.Form

Public frm1 As New Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
frm1.Show()
End Sub


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
frm1.Activate()
frm1.ListView1.Items.Add("XXX")
'frm1.ListView1.Items(0).SubItems.Add("xxx")

End Sub
End Class

兄弟你不会照葫芦画瓢啊?
服!
回复
Intel8088 2005-01-11
回复人: Paradise_heida(学海无涯,回头是岸!)
Public Class Form1
Inherits System.Windows.Forms.Form

Public frm2 As New Form2

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
frm2.Show()
End Sub


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
frm2.Activate()
frm2.ListView1.Items.Add("XXX")
'frm2.ListView1.Items(0).SubItems.Add("xxx")

End Sub
End Class


-----------------------------------------------------

Paradise_heida(学海无涯,回头是岸!) 兄可能还没有看明白我的问题。你这是在form2中的listview1中添加记录。
我要求的是在form2中往form1中添加记录。

欢迎大家来想办法!来交流!!谢谢!!!
回复
Paradise_heida 2005-01-11
frm2.ListView1.Items.Add("XXX")
是添加第一列的一个新Item。

frm2.ListView1.Items(i).SubItems.Add("xxx")
是在第 i + 1 行添加第二列至最后一列的SubItems

回复
Intel8088 2005-01-11
Herro(金银岛):用vb6写个这样的东西,然后用vb.net打开升级,就有相关代码了。。。

那我得再装一个vb6.0,天啊,不是太麻烦了吗!!!!
有没有更好的方法!!!
回复
Paradise_heida 2005-01-11
Public Class Form1

Inherits System.Windows.Forms.Form

Public frm2 As New Form2

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
frm2.Show()
End Sub


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
frm2.Activate()
frm2.ListView1.Items.Add("XXX")
'frm2.ListView1.Items(0).SubItems.Add("xxx")

End Sub


End Class
回复
Herro 2005-01-11
用vb6写个这样的东西,然后用vb.net打开升级,就有相关代码了。。。
回复
Intel8088 2005-01-11
谢谢大家的回答。

我把我的问题写详细一点。
我有2个表单(form1,form2),form1中有一listview控件。然后在form1中:
代码:
dim oForm as new form2
oForm.Show()

然后我想在form2上往form1.listview中增加一条listviewitem.
不知这个代码该怎么写????????????


谢谢!

回复
Paradise_heida 2005-01-11
用Public Shared定义以后确实在窗体上看不到控件了,不过窗体运行起来以后是可以看到的。

我也不知道为什么在设计窗体的时候看不到控件了,可能是实例化的时候才动态生成的吧。
回复
Intel8088 2005-01-11
为什么改成Public Shared WithEvents ListView1 As System.Windows.Forms.ListView
这样,listview1控件会消失呢?
回复
myljypw 2005-01-11
就系要这句
回复
doggodwu 2005-01-11
两个FORM应该有关系的,一般都是从属关系。在SHOW之前定义,这样就可以追溯回去了
'form1
dim oForm as new form2
oForm.owner=me
oForm.Show()

'form2
dim oform1 as form1=type(me.owner,form1)
oform1.listview1.items.add("xxx")
回复
Paradise_heida 2005-01-11
上面的Form1里的代码写错了,应该是:

明白你的意思了,按照以下方法就能解决你的问题:

首先,把Form1里的windows自动生成的代码打开,找到定义ListView的那个语句,应该是这句:

Friend WithEvents ListView1 As System.Windows.Forms.ListView

把这句话改成:

Public Shared WithEvents ListView1 As System.Windows.Forms.ListView

这是第一步。

然后在Form2里定义实例化Form1的对象的时候这样定义:

Public Shared frm1 As New Form1

记住,要定义全局的,不要在Click事件的Sub里定义。

然后在Form2里写:

Public Class Form2

Inherits System.Windows.Forms.Form

Public Shared frm1 As New Form1

'Public frm1 As New Form1 <--- 这个是原来的,不要了,要上面那句定义。

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

frm1.ListView1.Items.Add("XXX")

'frm1.ListView1.Items(0).SubItems.Add("xxx")

End Sub

End Class

在Form1里写那个让Form2弹出的Click的Sub就行了:

Public Class Form1

Inherits System.Windows.Forms.Form

'Public frm1 As New Form2 <--- 这里错了,应该是下面的:
Public frm2 As New Form2

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
frm2.Show()
End Sub

End Class


我试过了,这样就能实现点击Form1的按钮,弹出Form2,然后按Form2的按钮给Form1的ListView添加Item。
你试试吧。
回复
阿云 2005-01-10
修改其中一个Form控件的private 权限为public
然后在另一个Form中即可访问
回复
Paradise_heida 2005-01-10
答楼主:

完全可以在Form1里控制Form2,不过事实上在Form1里控制的是Form2的一个实例化对象,而不是Form2这个类。

你可以在Form1类里定义一个全局的Public的实例化对象(其实Private也一样),然后在Form1里使用,应该没有问题。

我试验了一个TreeView的例子,我只是简单的改变这个TreeView的宽度。试验代码给你看看:

在Form1里有两个Button,在两个Button的Click事件里写的试验。Form2里有一个TreeView控件。

Public Class Form1

Inherits System.Windows.Forms.Form

Public frm2 As New Form2

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button29.Click
frm2.Show()
End Sub


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button30.Click
frm2.Activate()
frm2.TreeView1.Width = 20
End Sub


End Class

回复
henrysap 2005-01-10
参考以下代码

Public Class Form1
Inherits System.Windows.Forms.Form
Dim frm As New Form3

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If frm.Visible = False Then
frm = New Form3
End If
frm.Activate()
frm.Show()
End Sub


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If frm.frm2.Visible = True Then
Me.TextBox1.Text = frm.frm2.TextBox1.Text
Else
Me.TextBox1.Text = "Form2 is not open"
End If
End Sub
End Class


Public Class Form3
Inherits System.Windows.Forms.Form
Public frm2 As New Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If frm2.Visible = False Then
frm2 = New Form2
End If
frm2.Activate()
frm2.Show()
End Sub
End Class

回复
发动态
发帖子
VB
创建于2007-09-28

1.5w+

社区成员

VB技术相关讨论,主要为经典vb,即VB6.0
申请成为版主
社区公告
暂无公告