vb.net-如何从另一个模块更改表单元素的属性

汉多

我正在尝试根据属性的新值,从公共属性(LogQry)的设置过程中更改按钮(cmdLogQry)的背景颜色。

如果将属性在代码属属中更改为包含按钮的形式(在相同或什至另一个按钮的Click方法中),则此方法有效。但是,如果要从另一个模块更改属性(对COM端口的DataReceived事件的处理程序),则此方法不起作用。没有错误消息或任何内容-LogQry的值可以正确更改,但按钮的颜色不会更改。

我做错了什么?

Public Class Handler

Private _logQry As Boolean = False

Public Property LogQry() As Boolean
    Get
        Return _logQry
    End Get
    Set(ByVal value As Boolean)
        _logQry = value
        If value Then
            frmMain.cmdLogQry.BackColor = Color.Red
        Else
            frmMain.cmdLogQry.BackColor = Color.Blue
        End If
    End Set
End Property

Private Sub comPort_DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs)
...
    LogQry = Not LogQry ' does NOT change color
...
End Sub

End Class

Public Class frmMain     
Private comm As New Handler()
...
Private Sub cmdLogQry_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdLogQry.Click
    comm.LogQry = Not comm.LogQry ' does change color
End Sub
...
End Class
史蒂夫

此问题是由VB.NET实现创建的表单类的默认实例引起的。更多有关默认实例的信息可以在此处以及Hans Passant的答案中找到
本质上,当您定义表单类时,VB.NET编译器会创建该类的默认实例,该实例的名称与该类的名称相同,但这会在诸如NET之类的面向对象的环境中造成许多误解。

要解决您的问题,您需要在Handler类中实现一个构造函数,以接收frmMain的实际实例,将其存储在类变量中,并在您想要在实际显示的表单上修改某些内容时使用该实例。

Public Class Handler

    Private _logQry As Boolean = False
    Private _mainInstance As frmMain

    Public Sub New(mainInstance as frmMain)
        _mainInstance = mainInstance
    End Sub

    Public Property LogQry() As Boolean
        Get
            Return _logQry
        End Get
        Set(ByVal value As Boolean)
            _logQry = value
            If value Then
                _mainInstance.cmdLogQry.BackColor = Color.Red
            Else
                _mainInstance.cmdLogQry.BackColor = Color.Blue
            End If
        End Set
    End Property
    ....

End Class

现在,当您创建Handler实例时,将对当前frmMain的引用传递给

Public Class frmMain     

    Private comm As Handler
    ...
    Private Sub cmdLogQry_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdLogQry.Click
        comm = new Handler(Me)
        comm.LogQry = Not comm.LogQry ' does change color
    End Sub
    ...
End Class

请记住,此解决方案还会带来问题。它将类Handler耦合到您的frmMain,这两个现在是不可分割的。可能更好的方法是在Handler类中创建一个Event,因此,每个想要通知的表单都可以订阅该事件并在需要时接收信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

vb.net-如何从另一个模块更改表单元素的属性

来自分类Dev

如何从VB.NET中的另一个表单打开表单?

来自分类Dev

处理从 vb.net 中的另一个类更改的属性

来自分类Dev

VB .NET | 与另一个程序的交互

来自分类Dev

类属性应从另一个类(vb.net)提供

来自分类Dev

如何处理另一个窗体的窗体关闭事件(VB.Net)

来自分类Dev

VB.NET-如何从另一个线程读取值

来自分类Dev

如何将数据从DataGridView传递到另一个VB.NET

来自分类Dev

如何在 VB.Net 2003 中创建按钮以打开另一个 apx.net 网页

来自分类Dev

将表单从一个项目复制到另一个项目,但资源未显示VB.net

来自分类Dev

如何在vb.net中一个接一个地移动文件并将其从目录重命名为另一个

来自分类Dev

如何在vb.net中一个接一个地移动文件并将其从目录重命名为另一个

来自分类Dev

如何使用字符串的值来控制VB.net中的另一个控件?

来自分类Dev

如何从VB.NET中的另一个应用程序调用clickonce部署的应用程序?

来自分类Dev

如何使用字符串的值来控制VB.net中的另一个控件?

来自分类Dev

在VB.NET中如何将MST时区值转换为另一个时区?

来自分类Dev

如何将文本框的值传递到asp.net(vb)中的另一个页面

来自分类Dev

如何将项目添加到 vb.net 中的另一个列表框

来自分类Dev

VB.net OnClientClick传递另一个div的ID

来自分类Dev

使用vb.net从另一个进程读取/写入内存

来自分类Dev

将目标URL从另一个应用程序获取到VB.net

来自分类Dev

将正确的对象数组与vb.net中的另一个对象数组链接

来自分类Dev

VB.NET链接标签到另一个标签

来自分类Dev

引用另一个具有COM可见TRUE的VB.NET exe

来自分类Dev

VB.NET在另一个按钮上绘制按钮

来自分类Dev

从另一个线程(VB.NET)WPF更新控件

来自分类Dev

从vb.net中的另一个类更新GUI

来自分类Dev

另一个-必须声明标量变量@TDate Vb.Net

来自分类Dev

VB.Net在另一个线程上运行任务

Related 相关文章

  1. 1

    vb.net-如何从另一个模块更改表单元素的属性

  2. 2

    如何从VB.NET中的另一个表单打开表单?

  3. 3

    处理从 vb.net 中的另一个类更改的属性

  4. 4

    VB .NET | 与另一个程序的交互

  5. 5

    类属性应从另一个类(vb.net)提供

  6. 6

    如何处理另一个窗体的窗体关闭事件(VB.Net)

  7. 7

    VB.NET-如何从另一个线程读取值

  8. 8

    如何将数据从DataGridView传递到另一个VB.NET

  9. 9

    如何在 VB.Net 2003 中创建按钮以打开另一个 apx.net 网页

  10. 10

    将表单从一个项目复制到另一个项目,但资源未显示VB.net

  11. 11

    如何在vb.net中一个接一个地移动文件并将其从目录重命名为另一个

  12. 12

    如何在vb.net中一个接一个地移动文件并将其从目录重命名为另一个

  13. 13

    如何使用字符串的值来控制VB.net中的另一个控件?

  14. 14

    如何从VB.NET中的另一个应用程序调用clickonce部署的应用程序?

  15. 15

    如何使用字符串的值来控制VB.net中的另一个控件?

  16. 16

    在VB.NET中如何将MST时区值转换为另一个时区?

  17. 17

    如何将文本框的值传递到asp.net(vb)中的另一个页面

  18. 18

    如何将项目添加到 vb.net 中的另一个列表框

  19. 19

    VB.net OnClientClick传递另一个div的ID

  20. 20

    使用vb.net从另一个进程读取/写入内存

  21. 21

    将目标URL从另一个应用程序获取到VB.net

  22. 22

    将正确的对象数组与vb.net中的另一个对象数组链接

  23. 23

    VB.NET链接标签到另一个标签

  24. 24

    引用另一个具有COM可见TRUE的VB.NET exe

  25. 25

    VB.NET在另一个按钮上绘制按钮

  26. 26

    从另一个线程(VB.NET)WPF更新控件

  27. 27

    从vb.net中的另一个类更新GUI

  28. 28

    另一个-必须声明标量变量@TDate Vb.Net

  29. 29

    VB.Net在另一个线程上运行任务

热门标签

归档