1

テキストボックスに対応するメッセージを含む3つのチェックボックスがあります。先生は、チェックボックスがオンになっているときはメッセージをテキストボックスに残し、チェックボックスがオフになっているときはテキストを非表示にしたいと考えています。私の場合、3つのチェックボックスをオンにすると、対応する3つのメッセージが表示されますが、チェックボックスの1つをオフにして、他の2つをオンのままにすると、すべてのメッセージが消えます。私の問題は、チェックボックスの1つをオフにしても、他の2つがチェックされている場合、対応するメッセージがチェックされ、残りの2つのチェックボックスがテキストボックスに残ることです。

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";
}
4

2 に答える 2

0

チェックボックスの状態に応じてメッセージを作成する必要があるようです。メソッドを作成できます。このメソッドは、チェックボックスの状態が変更されたときにジョブを実行して呼び出します。

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();
}

またはより良いもの-すべてのチェックボックスに対して1つのイベントハンドラーを作成します

// 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();
}

ブール値をtrue/falseと比較する必要はありません。これらの値を直接使用してくださいif (chkCarWheels.Checked)。また、C#ではCamelCase名フォームメソッドを使用することに注意してください。またStringBuilder、メッセージ全体を作成し、それをラベルに割り当てるために使用することを検討してください。

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();
} 
于 2012-12-09T17:19:13.190 に答える
0

これを試して:

    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;

}
于 2012-12-09T17:21:07.883 に答える