从其他类.net访问控件

时间:2013-10-23 22:01:48

标签: vb.net visual-studio-2010

我知道这已被问了一百万次,我尝试了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表单访问控件?     结束班

2 个答案:

答案 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

享受

进一步阅读:

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

答案 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

在循环中使用该变量。