其他文本框文本更改时,如何自动更改文本框文本?

时间:2018-12-18 06:45:43

标签: c# c#-4.0

我有这些文本框,分别命名为袋,费率,数量,包装尺寸和数量,我要做的是,当用户输入袋,费率和包装尺寸时,数量文本框应自动显示相应的数量和数量,但在我的情况下我单击“计算”按钮,然后它会计算并显示我使用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();

        }


    }


}

2 个答案:

答案 0 :(得分:0)

通常,如果文本值更改,“ TextChanged”事件将自动触发。

因此,这里的问题是我在考虑必须存在事件处理程序工作的其他“局部类”。像这样:

txtBags.TextChanged += new EventHandler(txtBags_TextChanged);

请检查您的其他局部类是否存在。

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

您可以手动阅读此声明。

如果您没有其他局部类的经验,可以尝试删除这些文本框并重新添加它们,从而自动解决问题。

答案 1 :(得分:0)

您需要在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();
}

类似地,您需要为Text Control for Size添加Changed事件。 txtQty通过DisplayAmt()方法更新。因此,除非出于OP中未指定的原因,否则您不一定需要它。