我试图将一个布尔值传递给另一个方法后,给它赋值(真/假)
我希望它可以与多个布尔值一起使用,例如:
'My.Settings.boolean1 = False
'My.Settings.boolean2 = True
Private Sub Button1_Click() Handles Button1.Click
DoSomething(My.Settings.boolean1)
End Sub
Private Sub Button2_Click() Handles Button2.Click
DoSomething(My.Settings.boolean2)
End Sub
Public Shared Sub DoSomething(aBoolean As Boolean) 'BooleanName As String
if aBoolean then
aBoolean = False '(Sets locally not the main boolean)
'etc...
Else
aBoolean = True
'etc...
End If
End Sub
它将值分配给布尔值,并且实际上不触及作为目标的原始布尔值
我尝试使用字符串将布尔名称传递给DoSomething(aBoolean As Boolean, BooleanName As String)
,因此我可以使用布尔来知道条件,并使用字符串来知道使用Convert.ToBoolean(BooleanName)
分配的布尔名称
..它也不起作用
甚至有可能做这样的事情吗?我觉得可以,但是我仍在努力将其包裹住
真实代码示例:
Private Sub PopupMessages_Button_Click(sender As Object, e As EventArgs) Handles PopupMessages_Button.Click
Button_MouseClick(PopupMessages_Button, My.Settings.PopupMessages, ToolTip, PopupMessages_Button_Tooltip)
End Sub
Public Shared Sub Button_MouseClick(aButton As Button, aBoolean As Boolean, aToolTip As ToolTip, aToolTip_txt As String)
If aBoolean Then
aButton.BackColor = Color.WhiteSmoke
aBoolean = False
aToolTip.SetToolTip(aButton, "(Disabled) " + aToolTip_txt)
Else
button.BackColor = Color.Green
aBoolean = True
aToolTip.SetToolTip(aButton, "(Enabled) " + aToolTip_txt)
End If
My.Settings.Save()
End Sub
答案 0 :(得分:1)
有可能。您可以通过将其设置为ByRef
参数来实现。例如
Private Sub Button1_Click() Handles Button1.Click
DoSomething(My.Settings.boolean1)
End Sub
Public Shared Sub DoSomething(ByRef aBoolean As Boolean)
aBoolean = Not aBoolean
End Sub
以为使用String
代替Boolean
是可行的,这并不是一个完全疯狂的想法,因为String
是引用类型。但是,尽管它是引用类型,但字符串被设计为不可变的,并且有些特殊情况。因此,实际上,即使从技术上讲它是一种引用类型,它的行为也类似于值类型。如果您使用了StringBuilder
之类的可变引用类型,那将是可行的(尽管我不建议这样做-ByRef
显然更可取)。
话虽这么说,值得一提的是,除特殊情况外,大多数人通常不建议使用ByRef
参数,因为它通常并不明显。在阅读代码时,不能轻易说出该方法更改了参数的值(在C#中更明显,因为必须在每个调用位置指定out
)。通常建议使用方法返回新值,而不是:
Private Sub Button1_Click() Handles Button1.Click
My.Settings.boolean1 = DoSomething(My.Settings.boolean1)
End Sub
Public Shared Function DoSomething(aBoolean As Boolean)
Return Not aBoolean
End Sub
答案 1 :(得分:0)
要做的第一件事不是直接引用“ My.Settings”。这就像直接引用控件文本/整数(或其他任何东西)一样。加载值然后操作它们,然后执行所需的操作。
在此示例中,将两个布尔值作为一个类似的变量,并在Form_Load或初始化例程的初始化过程中将其加载。
private/public MySavedBoolean1 as Boolean
private/public MySavedBoolean2 as Boolean
Form_Load(或其他)
MySavedBoolean1 = My.Settings.boolean1
MySavedBoolean2 = My.Settings.boolean2
用法:
Private Sub Button1_Click() Handles Button1.Click
MySavedBoolean1 = Not MySavedBoolean1
'You can re-save it to settings if need be:
My.Settings.boolean1 = MySavedBoolean1
My.Settings.Save '(or you could do this later)
End Sub