vb.net - 如何在 Visual Basic 中同时运行两个复选框事件?
问题描述
我正在尝试在 Visual Basic 中创建一个表单,允许人们在老式唱片上写评论。当它显示最终结果时,我必须能够让用户使文本变得更粗体、斜体、下划线等。我希望通过使用复选框来做到这一点,但我不确定如果我写什么代码我将同时运行两个复选框事件。
任何帮助表示赞赏,非常感谢。
解决方案
不会有“同时运行两个复选框事件”。您的实际意思是CheckBoxes
同时检查两个。这相当简单,因为应用于您的Style
属性是 type ,它支持复合值。在 for Bold 的情况下,你会做这样的事情:Font
TextBox
FontStyle
CheckedChanged
CheckBox
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
。当您使用二进制表示时,很容易看到发生了什么。
Enums
likeFontStyle
是数字的友好表示。、Bold
和字段的值分别为 1、2 和 4,即二进制的 001、010 和 100 Italic
。Underline
如您所见,每个字段在其二进制表示中设置了一个且只有一个位。按位运算很有用,因为它们可以设置或重置组合值中的单个位。例如,如果你没有设置样式并且你想应用Bold
你得到的样式:
000 001 - -或者 001
如果在第一个操作数或第二个操作数中设置该位,则结果将设置一个特定位,因此是按位运算Or
符。如果您还想设置Underline
样式:
001 100 - -或者 101
所以和的组合Bold
二进制Underline
是101,十进制是5。如果您想删除Bold
样式,您首先要删除样式,Not
这Bold
意味着切换每一位:
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
如您所见,将扩展调用为实例方法比每次都写出完整的按位表达式更简单。
推荐阅读
- wordpress - 调整旋转木马上的图像大小
- sql - 如果 where 子句不返回任何内容,则在聚合列中返回 null
- nuxt.js - 如何在 vuetify 中的 v-navigation-drawer 迷你变体中垂直居中 v-list?
- python - 提高事件持续时间计算的性能
- flutter - 如何修复 ImagePicker 取消按钮上的“NoSuchMethodError:getter 'path' was called on null”?
- regex - 在 2 个连续数字之间查找 (regEx)
- swift - SwiftUI:如何将数组传递给要在 ForEach 中使用的视图
- flutter - Flutter integration_test - 制作截图
- java - Spring Files.readString() 不适用于设置为 Java 11 的 Maven
- javascript - Vue.js,从子级向父级发出多个参数