我正在开发VS 2012中的vb.net项目,该项目有多种形式。我有,比方说,Form1有一个ListView,我从Form1调用From2。我将此代码添加到Form2的Load事件:
Form1.ListViewTest.Items.Add("test")
visual studio没有抛出错误,但实际上Form1中的ListView控件没有任何反应。我试图将Modifiers从Friend更改为public,但没有成功。还有其他我想念的东西吗?
答案 0 :(得分:1)
您必须访问form1的实例,而不是表单1对象本身。逐步浏览所有打开的表单,并获得所需的表单。我个人使用表单的.Tag对象,只需在其中添加一个字符串即可识别它。
For Each f As Form In My.Application.OpenForms
If Not f.InvokeRequired Then
' Can access the form directly.
'Get main form , use main form
If f.Tag = "main" Then
Dim fcast As New form_form1 '<< whatever your form name
fcast = f
Dim xitem As New ListViewItem
xitem.Text = "blah"
xitem.SubItems.Add("sub blah")
fcast.listview1.Items.Add(xitem) '<< use listview name
End If
End If
Next
答案 1 :(得分:0)
这非常简单,如果您要从对话框窗口引用任何控件,有两种方法可以执行此操作,第一种方法如下:
第一部分
1 - 确保您要访问修改器的控件设置为Public
2 - 然后在对话框窗口中执行以下操作:
Dim f as Form1'你不需要使用new,因为你不想使用另一个新版本,你想使用现有版本,所以你只能使用表单名作为参考
3 - 你这样做:
f = Ctype(Me.Owner,Form1)'你不需要循环遍历表单集合,因为每个表单名称都是唯一的
f.LightGridControl.Text =“此信息”
第二部分
您可以在主窗口的声明部分中创建私人可变的
私有_mainWin为form1'这是相同的窗口唯一名称
然后你创建一个
Public Property MainForm as Form1 得到 返回_mainWin 结束了 设置(ByRef值为Form1) _mainForm = value 结束集 如果
结束 在按钮点击事件中,您可以写下:
Dim f as New Form2
_mainForm =我
f.DialogBox(Me)的
然后在任何情况下,从form2你想从form1(MainWindow)访问控件,你只需这样做:
Dim f as form1
f.MainForm.TextBox1.Text =“我的信息”
这很容易我的朋友!祝你好运,让我知道它是怎么回事。
祝你有个美好的一天!希望这可以帮助别人!!