【问题标题】:How to change textbox text automatically when other textbox text changes?其他文本框文本更改时如何自动更改文本框文本?
【发布时间】:2018-12-18 15:23:43
【问题描述】:

我有这些名为bags,rate,quantity,packing size and amount的文本框我想做的是当用户输入bags和rate and packing size时,数量文本框应该自动显示相应的数量和数量,但在我的情况下我点击计算按钮,然后它计算并显示我使用 textchanged 事件尝试过的数量和金额,但它没有完成这项工作?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Login
{
    public partial class Sale : Form
    {
        SaleCalci sale;
        SaleBillheader SaleHeaderModel = new SaleBillheader();
        tbl_SaleBillDetails SaleDetailModel = new tbl_SaleBillDetails();



        public Sale()
        {
            InitializeComponent();
        }

        private void Cancelbtn_Click(object sender, EventArgs e)
        {
            clear();
        }

        private void clear()
        {
            txtBillNo.Text = txtDesc.Text = "";
            txtBags.Text = txtQty.Text = txtRate.Text = txtAmt.Text = "0.00";
            if(txtQty.Text !=null &&  txtAmt.Text !=null )
            {
                txtQty.Text = "0.00";
                txtAmt.Text = "0.00";
            }
            Savebtn.Text = "Save";
            SaleHeaderModel.SaleBillHeaderId = 0;
            SaleDetailModel.SaleBill_Id = 0;
        }

        private void Exitbtn_Click(object sender, EventArgs e)
        {
           var result =  MessageBox.Show("Are you sure you want to close this form ?", "Confirm", MessageBoxButtons.YesNo);
           if (result == DialogResult.Yes)
           { this.Close(); }


        }

        private void Sale_Load(object sender, EventArgs e)
        {
            ItemCombo();
            PartyCombo();
            PackingSizeCombo();

           // clear();
        }

        private void ItemCombo()
        {
            UserDataEntities db = new UserDataEntities();
            Itembox.DataSource = db.tbl_ItemId.ToList();
            Itembox.ValueMember = "ItemId";
            Itembox.DisplayMember = "ItemName";

        }
        private void PartyCombo()
        {
            UserDataEntities db = new UserDataEntities();
            PartyBox.DataSource = db.tbl_Parties.ToList();
            PartyBox.ValueMember = "Id";
            PartyBox.DisplayMember = "PartyName";

        }
        private void PackingSizeCombo()
        {
            UserDataEntities db = new UserDataEntities();
            PackingBox.DataSource = db.PackingSizes.ToList();
            PackingBox.ValueMember =  "PackingSizeId";
            PackingBox.DisplayMember = "PackingSize1";
        }

        private void Savebtn_Click(object sender, EventArgs e)
        {
            CalculateAmount();
            DisplayAmt();
        }
        private void CalculateAmount()
        {
            int bags = 0;
            decimal rate = 0;
            int pksize = 0;

            bags = Convert.ToInt32(txtBags.Text);
            rate = Convert.ToDecimal(txtRate.Text);
            pksize = Convert.ToInt32(PackingBox.Text);

            sale = new SaleCalci(bags,rate, pksize);

            //sale.Bags = Convert.ToInt32(txtBags.Text);
            //sale.Rate = Convert.ToDecimal(txtRate.Text);


            //SaleDetailModel.Bags = int.Parse(txtBags.Text.Trim());
            //SaleDetailModel.Qty = Convert.ToDecimal(txtQty.Text.Trim());
            //SaleDetailModel.Rate = Convert.ToDecimal(txtRate.Text.Trim());
           // SaleDetailModel.Amount = amount;






        }

        private void txtAmt_TextChanged(object sender, EventArgs e)
        {
           // txtAmt.Text = sale.CalucalteAmt.ToString();
        }

        private void Sale_Click(object sender, EventArgs e)
        {
            if ((txtBags.Text == "0.00") && (txtQty.Text == "0.00")&&(txtRate.Text == "0.00")&& (txtAmt.Text =="0.00"))
            {
                txtAmt.Clear();
                txtBags.Clear();
                txtQty.Clear();
                txtRate.Clear();
            }
        }

        private void txtQty_TextChanged(object sender, EventArgs e)
        {

            DisplayAmt();

        }

        private void txtBags_TextChanged(object sender, EventArgs e)
        {

           // sale.Bags = Convert.ToInt32(txtBags.Text);
           // DisplayAmt();
        }

        private void PackingBox_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void txtRate_TextChanged(object sender, EventArgs e)
        {

           // DisplayAmt();
        }

        private void DisplayAmt()
        {
            decimal _amt = sale.CalucalteAmt;
            txtQty.Text = sale.CalculateQty().ToString();
            txtAmt.Text = _amt.ToString();

        }


    }


}

【问题讨论】:

  • "...它不起作用..." - 此信息并没有真正的帮助。它没有说明究竟是什么不起作用,即您是否在任何地方收到任何错误消息,您是否尝试调试问题以确保它确实完成了预期的事情。
  • 请发布您问题的相关代码,无需发布您的整个课程

标签: c# c#-4.0


【解决方案1】:

如果文本值发生变化,通常会自动触发“TextChanged”事件。

所以这里的问题是我考虑你的另一个“部分类”,其中必须存在事件处理程序工作。比如:

txtBags.TextChanged += new EventHandler(txtBags_TextChanged);

如果存在这种情况,请检查您的其他部分课程。

如果您移动 gui 元素或出于其他原因,此事件处理程序有时会从项目中消失...

您可以手动阅读此语句。

顺便说一句,如果您没有使用其他部分类的经验,那么您可以尝试删除这些文本框并重新添加它们,然后您的问题将自动解决。

【讨论】:

    【解决方案2】:

    您需要在 txtBags 、 txtRate 和 Size 的 TextChanged 事件中调用 DisplayAmt。在上面的代码中,对 DisplayAmt 的调用被注释掉了。相反,您在 txtQty 的 TextChanged 事件中调用 DisplayAmt。

    你应该这样做,而不是这样做。

    private void txtAmt_TextChanged(object sender, EventArgs e)
    {
       DisplayAmt();
    }
    
    private void txtRate_TextChanged(object sender, EventArgs e)
    {
       DisplayAmt();
    }
    

    同样,您需要为文本控件添加 Changed 事件以获取 Size。 txtQty 由 DisplayAmt() 方法更新。所以你不一定需要它,除非出于 OP 中未指定的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      相关资源
      最近更新 更多