我试图在每次单击按钮时更改按钮的文本。
按钮一开始是“ON”。当我第一次点击它时,它应该变为“OFF”,再次点击时,应该变回“ON”。
我知道如何在单击时将其更改为“OFF”,但我不确定如何检查第二次单击,以便我可以将文本更改回“ON”。
以下是我的目前的代码:
private void OrdersButton_Click(object sender, EventArgs e)
{
OrdersButton.Text = " Turn Orders Off";
}
private void OrdersButton_Click(object sender, EventArgs e)
{
if (OrdersButton.Text == "Turn Orders On")
{
OrdersButton.Text = "Turn Orders Off";
}
else if (OrdersButton.Text == "Turn Orders Off")
{
OrdersButton.Text = "Turn Orders On";
}
}
希望这能帮到你。
我能看到这样做可能存在几个问题,并可以提供一个更加面向对象的解决方案:添加一个属性来跟踪当前的“状态”:
private bool _IsOn;
public bool IsOn
{
get
{
return _IsOn;
}
set
{
_IsOn = value;
OrdersButton.Text = _IsOn ? "On" : "Off";
}
}
并使用事件处理程序来简单地切换属性:
private void OrdersButton_Click(object sender, EventArgs e)
{
IsOn = !IsOn;
}
那样做会更容易在以后访问信息,而且你可以轻松地用任何你喜欢的东西替换开/关 - 即使需要全球化/本土化。我认为有代码依赖于显示文本是非常糟糕的编程实践...只是测试当前文本:
OrdersButton.Text = OrdersButton.Text.EndsWith("Off") ? "Turn Orders On" : "Turn Orders Off";
编辑:正如Cody在下面的评论中指出的那样,这种方法在本地化方面效果不佳。如果要更轻松地进行本地化,请使用ViewState(假设初始文本是为了打开订单):
bool ordersWereOn = (ViewState["OrdersAreOn"] as bool?) ?? false;
ViewState["OrdersAreOn"] = !ordersWereOn;
OrdersButton.Text = ordersWereOn ? "Turn Orders On" : "Turn Orders Off";
有很多方法可以做到这一点。
对我来说,我可能会使用Control
的Tag
属性,因为:
以下是示例代码:
private void OrdersButton_Click(object sender, EventArgs e)
{
bool value = (OrdersButton.Tag as bool?) ?? true;
OrdersButton.Tag = !value;
OrdersButton.Text = "Turn Orders " + (value ? "On" : "Off");
}
您还可以设置默认的Tag
值(true或false),并删除对null值的检查。
以后您始终可以通过以下方式访问它:
public void DoSomeImportantThings()
{
var areOrdersTurnedOn = (bool)OrdersButton.Tag;
}
private void button4_Click(object sender, EventArgs e)
{
if (button4.Text == "Show Password")
{
textBox2.PasswordChar = '\0';
button4.Text = "Hide Password";
}
else
{
textBox2.PasswordChar = '*';
button4.Text = "Show Password";
}
}
这可以是您在Avalonia中的XML按钮:
<Button Width="..." Grid.Row="..." Grid.Column="..." HorizontalContentAlignment="Center" IsVisible="true" Click="OnClickStart" Content="Start"/>
然后你可以在视图中编写代码,该方法为:OnClickStart:
private void OnClickStart(object sender, RoutedEventArgs e)
{
Button startBtn = (Button) sender ;
if (startBtn.Content is "Start")
{
System.Console.WriteLine("the start btn is pressed");
startBtn.Content = "Stop";
}else if (startBtn.Content is "Stop")
{
System.Console.WriteLine("the stop btn is pressed!");
startBtn.Content = "Start";
}
}