【问题标题】:Adding a new line when checking a checkbox选中复选框时添加新行
【发布时间】:2019-09-26 23:15:58
【问题描述】:

当我单击一个复选框时,我希望下一个复选框信息显示在新行上,我知道如何使用“\r\n”执行此操作,但是当取消选中该框并重新选中该框时,它会添加一个新的文本上方的行将原始文本向下移动 1 行。 https://imgur.com/a/IHDDG85

我试过 "\r\n" 和 Environment.NewLine

        private void chkHamburger_CheckedChanged(object sender, EventArgs e)
        {

            if (chkHamburger.Checked == true)
            {
                txtHamburger.Enabled = true;
                txtHamburger.Text = "";
                txtHamburger.Focus();
                txtOrder.Text += ("Hamburger");
            }
            else
            {
                txtHamburger.Enabled = false;
                txtHamburger.Text = "0";
            }
            if (chkHamburger.Checked == false)
            {
                txtOrder.Text = txtOrder.Text.Replace("Hamburger", "");
            }
        }

        private void chkCheeseBurger_CheckedChanged(object sender, EventArgs e)
        {
            if (chkCheeseBurger.Checked == true)
            {
                txtCheeseBurger.Enabled = true;
                txtCheeseBurger.Text = "";
                txtCheeseBurger.Focus();
                txtOrder.Text += ("Cheese Burger");
            }
            else
            {
                txtCheeseBurger.Enabled = false;
                txtCheeseBurger.Text = "0";
            }
            if (chkCheeseBurger.Checked == false)
            {
                txtOrder.Text = txtOrder.Text.Replace("Cheese Burger", "");
            }

        }

我希望复选框的文本显示在新行上,但重新选中该框时,其上方不应出现空格。

【问题讨论】:

  • 似乎只使用ListBox 可能更容易。
  • @Steve,对那个进行了排序。不过与这个问题无关。

标签: c#


【解决方案1】:

我建议您使用List<string> 添加或删除订单。然后使用string.Join用一行代码很容易重建txtOrder数据

List<string> orders = new List<string>();
private void chkHamburger_CheckedChanged(object sender, EventArgs e)
{
    txtHamburger.Enabled = chkHamburger.Checked;
    if (chkHamburger.Checked)
    {
        txtHamburger.Text = "";
        txtHamburger.Focus();
        orders.Add("Hamburger");
    }
    else
    {
        txtHamburger.Text = "0";
        orders.Remove("Hamburger");
    }
    UpdateOrders();
}
private void chkCheeseBurger_CheckedChanged(object sender, EventArgs e)
{
    txtCheeseBurger.Enabled = chkCheeseBurger.Checked;
    if (chkCheeseBurger.Checked)
    {
        txtCheeseBurger.Text = "";
        txtCheeseBurger.Focus();
        orders.Add("Cheese Burger");
    }
    else
    {
        txtCheeseBurger.Text = "0";
        orders.Remove("Cheese Burger");
    }
    UpdateOrders();
}

private void UpdateOrders()
{
    txtOrders.Text = string.Join(Environment.NewLine, orders);
}

【讨论】:

  • 我希望您的最终版本不会使用字符串列表,而是使用包含价格和数量等的对象。例如,如果订单是这些事物的列表,则可以使用 @ 设置文本987654323@
  • 是的,当然这是可能的,而且更可取,但是我会从 TextBox 更改为 DataGridView,否则结果非常难以阅读。
【解决方案2】:

最好的方法是建立一个独立于刚刚发生的内容构建文本内容的例程——您可以使用连接或循环来创建文本内容。

将此作为函数并在复选框更改时调用它。该函数循环遍历所有项目并将它们与格式和总计等一起添加到输出中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多