首页 > 解决方案 > 如何在 Visual Basic 中同时运行两个复选框事件?

问题描述

我正在尝试在 Visual Basic 中创建一个表单,允许人们在老式唱片上写评论。当它显示最终结果时,我必须能够让用户使文本变得更粗体、斜体、下划线等。我希望通过使用复选框来做到这一点,但我不确定如果我写什么代码我将同时运行两个复选框事件。

任何帮助表示赞赏,非常感谢。

标签: vb.net

解决方案


不会有“同时运行两个复选框事件”。您的实际意思是CheckBoxes同时检查两个。这相当简单,因为应用于您的Style属性是 type ,它支持复合值。在 for Bold 的情况下,你会做这样的事情:FontTextBoxFontStyleCheckedChangedCheckBox

If CheckBox1.Checked Then
    'Apply the Bold style.
    TextBox1.Font = New Font(TextBox1.Font, TextBox1.Font.Style Or FontStyle.Bold)
Else
    'Remove the Bold style.
    TextBox1.Font = New Font(TextBox1.Font, TextBox1.Font.Style And Not FontStyle.Bold)
End If

您只需Bold在其他事件处理程序中替换为适当的字段。

在这种情况下使用它可能看起来有点违反直觉Or,但重要的是要理解这是一个按位运算。按位运算本质上是对操作数中每对位的布尔运算,其中 1 表示True,0 表示False。当您使用二进制表示时,很容易看到发生了什么。

EnumslikeFontStyle是数字的友好表示。、Bold和字段的值分别为 1、2 和 4,即二进制的 001、010 和 100 ItalicUnderline如您所见,每个字段在其二进制表示中设置了一个且只有一个位。按位运算很有用,因为它们可以设置或重置组合值中的单个位。例如,如果你没有设置样式并且你想应用Bold你得到的样式:

000
001
- -或者
001

如果在第一个操作数或第二个操作数中设置该位,则结果将设置一个特定位,因此是按位运算Or符。如果您还想设置Underline样式:

001
100
- -或者
101

所以和的组合Bold二进制Underline是101,十进制是5。如果您想删除Bold样式,您首先要删除样式,NotBold意味着切换每一位:

001
- -不是
110

然后您将And使用现有的组合样式获得结果:

101
110
- -和
100

And如果在第一个操作数和第二个操作数中未设置位,则按位运算符将在结果中设置一位。在这种情况下,两个操作数中唯一设置的位是第一个,因此它是结果中唯一设置的位。这意味着结果是二进制的 100,即十进制的 4 并且等于Underline样式,这正是我们所期望的。

编辑:

这是一组扩展方法,可以更轻松地使用控件和字体样式:

Imports System.Runtime.CompilerServices

Public Module ControlExtensions

    <Extension>
    Public Sub AddFontStyle(source As Control, style As FontStyle)
        source.Font = New Font(source.Font, source.Font.Style Or style)
    End Sub

    <Extension>
    Public Sub RemoveFontStyle(source As Control, style As FontStyle)
        source.Font = New Font(source.Font, source.Font.Style And Not style)
    End Sub

    <Extension>
    Public Sub ToggleFontStyle(source As Control, style As FontStyle)
        source.Font = New Font(source.Font, source.Font.Style Xor style)
    End Sub

    <Extension>
    Public Function ContainsFontStyle(source As Control, style As FontStyle) As Boolean
        Return (source.Font.Style And style) = style
    End Function

End Module

这是一些示例用法:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    TextBox1.AddFontStyle(FontStyle.Bold)
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    TextBox1.RemoveFontStyle(FontStyle.Bold)
End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    TextBox1.ToggleFontStyle(FontStyle.Bold)
End Sub

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    MessageBox.Show(TextBox1.ContainsFontStyle(FontStyle.Bold).ToString())
End Sub

如您所见,将扩展调用为实例方法比每次都写出完整的按位表达式更简单。


推荐阅读