2

我知道这已经被问了一百万次,我尝试了 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 是创建一个模块、一个公共静态类,并尝试将公共共享更新子放在主窗体本身上。尽管使用这些选项,但我通常会收到“无法从共享方法中引用类的实例成员”错误。

那么我错过了什么?我很想得到一些帮助。多谢你们。


编辑


你真的只是在这里分裂头发,即使没有代码,这也是完全有效的问题,但这里的代码不少:

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 表单访问控件?结束类

4

2 回答 2

4

为了从其他类调用控件,您必须启动表单和所有控件。

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

享受

对于一些额外的阅读:

http://www.vbforums.com/showthread.php?744677-RESOLVED-Struggling-with-trying-to-access-a-control-on-a-form-from-seperate-classes&p=4563273&highlight=#post4563273

于 2014-01-23T23:58:08.217 回答
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

并在循环中使用该变量。

于 2016-11-27T23:49:45.213 回答