winforms离开事件和textchanged

时间:2015-02-06 22:36:53

标签: c# winforms

我是学习winforms的新手,我坚持以下问题,我不认为我所做的是正确的方法,所以任何帮助都会受到赞赏。

我有4个文本框,例如以下

private void txtBxPlayer1Bid_TextChanged(object sender, EventArgs e)
        {

            txtBxFundsAvialable.Text = (Convert.ToInt32(txtBxFundsAvialable.Text) - Convert.ToInt32(txtBxPlayer1Bid.Text)).ToString();
        } 

第5个文本框txtBxFundsAvialable简单地从txtBxFundsAvialable中减去txtBxPlayer1Bid的值。

在designer.cs中我有

this.txtBxPlayer1Bid.Leave += new System.EventHandler(this.txtBxPlayer1Bid_TextChanged);

我遇到的问题是,如果我在txtBxFundsAvialable中有100并且在txtBxPlayer1Bid中输入10,则txtBxFundsAvialable中的值应为90,但txtBxPlayer1Bid等似乎进入循环并且txtBxFundsAvialable中的值变为60. 4个文本框X 10。

对于4个文本框中的任何一个都会发生这种情况

我能解决问题的唯一方法是在txtBxFundsAvialable_TextChanged中将4个文本框的值设置为0,如下所示。

 private void txtBxFundsAvialable_TextChanged(object sender, EventArgs e)
        {
            if (Convert.ToInt32(txtBxPlayer1Bid.Text) > 4 || (Convert.ToInt32(txtBxPlayer2Bid.Text)> 4 || (Convert.ToInt32(txtBxPlayer3Bid.Text)> 4) || (Convert.ToInt32(txtBxPlayer2Bid.Text)> 4)))
            {
                txtBxPlayer1Bid.Text    = "0";
                txtBxPlayer2Bid.Text    = "0";
                txtBxPlayer3Bid.Text    = "0";
                txtBxPlayer4Bid.Text    = "0";
             }
        }

我正在以正确的方式行事,如开头所述,我是winforms的新手,而且它是一条精准的曲线

2 个答案:

答案 0 :(得分:3)

我写了一个简单的代码,其中包含两个获取值的文本框和一个包含结果的文本框。 TextChanged事件的更新。尝试使用它来修复你的代码..

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        try
        {
            int num1 = Int32.Parse(textBox1.Text), num2 = Int32.Parse(textBox2.Text);
            textBox3.Text = (num1 - num2).ToString();
        }
        catch { }
    }

    private void textBox2_TextChanged(object sender, EventArgs e)
    {
        textBox1_TextChanged(sender, e);
    }

修改

试用此代码并链接您的任何"出价"文本框到此功能。此代码中的textbox1相当于您的"可用"文本框。

    private void textBox_Leave(object sender, EventArgs e)
    {
        try
        {
            int num = Int32.Parse(((TextBox)sender).Text), available = Int32.Parse(textBox1.Text);
            textBox1.Text = (available - num).ToString();
        }
        catch { }
    }

答案 1 :(得分:0)

不确定.Leave的运作方式。尝试使用.TextChanged或WinForms中的等效项。

所有四个(甚至五个)文本框都应使用相同的事件回调方法。

以下是您可以使用该方法执行的操作:

private void txtBx_TextChanged(object sender, EventArgs e)
{
    double player1 = 0, player2 = 0, player3 = 0, player4 = 0, total = 0;
    if (int.TryParse(txtBxPlayer1Bid.Text, out player1)
         && int.TryParse(txtBxPlayer2Bid.Text, out player2)
         && int.TryParse(txtBxPlayer3Bid.Text, out player3)
         && int.TryParse(txtBxPlayer4Bid.Text, out player4)
         && int.TryParse(txtBxFundsAvialable.Text, out total)

    {
        total = player1 + player2 + player3 + player4;
    }
}
相关问题