我知道这已被问了一百万次,我尝试了4-5种不同的解决方案,但似乎都没有产生任何结果。
我有一个名为“QoE”的主表格,我有两个名为“Utils”和“Tests”的课程
测试使用Utils.ProgressBar()
从Utils调用公共共享子Utils.ProgressBar()从名为QoE
的主窗体更新进度条控件ProgressBar修饰符选项设置为Public但我无法直接从Utils访问控件(我以前认为我能够这样做)。选项2是尝试在Utils类中使用它:
Dim f1 as New QoE()
f1.ProgressBarMain.Increment(+1)
f1.ProgressPercent.Text = f1.ProgressBarMain.Value.ToString() & "%"
但它不会产生任何结果。
选项3-5是创建一个模块,一个公共静态类,并尝试将公共共享更新子项放在Main表单本身上。使用这些选项虽然我通常会得到“无法从共享方法中引用类的实例成员”错误。
那我错过了什么?我会喜欢一些帮助。 多谢你们。
修改
你真的只是在这里分裂头发,即使没有代码,这也是完全有效的问题,但这里的代码不是那么简单:
Public Class QoE
End Class
Public Class Utils
public shared sub ProgressBar
Dim f1 as New QoE()
f1.ProgressBarMain.Increment(+1)
f1.ProgressPercent.Text = f1.ProgressBarMain.Value.ToString() & "%"
'QoE.ProgressBarMain.Increment(+1) Returns The error mentioned in the comments
end sub
End Class
Public Class Tests
public shared sub DoWork
Utils.Progressbar()
End Sub
那么为什么我不能在所有内容都设置为公开时从QoE表单访问控件? 结束班
答案 0 :(得分:2)
为了从其他类调用控件,您必须启动表单和所有控件。
Public Class Form1
Public Shared f as Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
f = Me
End Sub
End Class
然后在其他课程中,请参考f通常喜欢
Form1.f.Textbox1.Text = ""
或
Form1.f.CheckBox1.Checked = True
享受
进一步阅读:
答案 1 :(得分:0)
另一个解决方案是循环打开表单:
For Each FORM_ITEM As Form In Application.OpenForms
If FORM_ITEM.Name = "Form1" Then
With CType(FORM_ITEM, Form1)
'Enter your code here
End with
End if
Next
但是,这适用于每个打开的“Form1”。因此,如果您打算使用多个“Form1”,您可以在Form_Load上设置一个标识符,就像Nefariis在他的回答中所示。
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
F = Me
End Sub
在循环中使用该变量。