简体   繁体   English

当复选框仍处于选中状态时,将消息保留在文本框中

[英]Retain the message in the textbox when the checkbox is still checked

I have 3 checkboxes with corresponding message in a textbox. 我在文本框中有3个复选框和相应的消息。 My teacher wants the message to remain in the textbox when the checkbox is still checked and hide the text when it is unchecked. 我的老师希望在复选框仍处于选中状态时将消息保留在文本框中,而在未选中复选框时将其隐藏。 In my case when I checked the 3 checkboxes their 3 corresponding messages will appear but when I unchecked one of the checkboxes and the other two are still checked, all the message will disappear. 在我的情况下,当我选中3个复选框时,将出现它们3条对应的消息,但是当我取消选中其中一个复选框而其他两个仍处于选中状态时,所有消息将消失。 My problem is when I unchecked one of the checkbox and and the other 2 are still checked the corresponding messages with the remaining two checked checkboxes will remain in their textboxes. 我的问题是,当我取消选中其中一个复选框,而其他两个仍处于选中状态时,带有其余两个选中复选框的相应消息将保留在其文本框中。

private void chkCarWheels_CheckedChanged(object sender, EventArgs e)
{
    if (chkCarWheels.Checked == true)
        lblMessage.Text = lblMessage.Text + mycar.hasWheels(4);
    else
        lblMessage.Text = "My  " + txtName.Text + " Car";
}

private void chkCarAcceleration_CheckedChanged(object sender, EventArgs e)
{
    if (chkCarAcceleration.Checked == true)
       lblMessage.Text = lblMessage.Text + mycar.Accelerate();
    else
        lblMessage.Text = "My  " + txtName.Text + " Car";
} 

private void chkCarBreakpad_CheckedChanged(object sender, EventArgs e)
{
    if (chkCarBreakpad.Checked == true)
        lblMessage.Text = lblMessage.Text + mycar.hasBreak();
    else
        lblMessage.Text = "My  " + txtName.Text + " Car";
}

Looks like you need to create message depending on checkboxes states. 看起来您需要根据复选框状态创建消息。 You can create method, which will do the job and call it when state of some checkbox changed. 您可以创建方法,该方法将执行此工作并在某些复选框的状态更改时调用它。

private void chkCarWheels_CheckedChanged(object sender, EventArgs e)
{
    BuildMessage();
}

private void chkCarAcceleration_CheckedChanged(object sender, EventArgs e)
{
    BuildMessage();
} 

private void chkCarBreakpad_CheckedChanged(object sender, EventArgs e)
{
    BuildMessage();
}

Or the better one - create one event handler for all checkboxes : 或者更好的一种- 为所有复选框创建一个事件处理程序

// use for chkCarWheels, chkCarAcceleration, chkCarBreakpad
private void chkCar_CheckedChanged(object sender, EventArgs e)
{
    BuildMessage();
}

private void BuildMessage()
{     
    lblMessage.Text = "My  " + txtName.Text + " Car";
    if (chkCarWheels.Checked)
        lblMessage.Text = lblMessage.Text + mycar.hasWheels(4);
    if (chkCarAcceleration.Checked)
       lblMessage.Text = lblMessage.Text + mycar.Accelerate();
    if (chkCarBreakpad.Checked)
       lblMessage.Text = lblMessage.Text + mycar.hasBreak();
}

You don't need to compare boolean values with true/false. 您不需要将布尔值与true / false进行比较。 Use those values directly if (chkCarWheels.Checked) . if (chkCarWheels.Checked)直接使用这些值。 And keep in mind that in C# we use CamelCase names form methods. 请记住,在C#中,我们使用CamelCase名称形式方法。 Also consider to use StringBuilder to build whole message and then assign it to label: 还可以考虑使用StringBuilder构建整个消息,然后将其分配给label:

private void BuildMessage()
{
    StringBuilder sb = new StringBuilder();
    sb.AppendFormat("My {0} Car", txtName.Text);
    if (chkCarWheels.Checked)
        sb.Append(mycar.hasWheels(4));
    if (chkCarAcceleration.Checked)
       sb.Append(mycar.Accelerate());
    if (chkCarBreakpad.Checked)
       sb.Append((mycar.hasBreak());
    lblMessage.Text = sb.ToString();
} 

Try this: 尝试这个:

    private void chkCarWheels_CheckedChanged(object sender, EventArgs e)
    {
        chkCar();
    }

    private void chkCarAcceleration_CheckedChanged(object sender, EventArgs e)
    {
        chkCar();
    } 

    private void chkCarBreakpad_CheckedChanged(object sender, EventArgs e)
    {
       chkCar()
    } 



private void chkCar()
{

string msg="";

if (chkCarWheels.Checked)
msg=msg+mycar.hasWheels(4);

if(chkCarAcceleration.Checked)
msg=msg+mycar.Accelerate();

if(chkCarBreakpad.Checked)
msg=msg+mycar.hasBreak();

lblMessage.Text=msg;

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM