根据另一个文本框文本填充文本框

时间:2016-07-03 17:40:24

标签: c# textbox uwp

我有TextBoxA和TextBoxB。我想要做的是,每当我在TextBoxA中放入一个数字(是的,两个文本框值都是整数)时,TextBoxB应该用值(100-TextBoxA)“自动完成”。 TextBoxB也是如此。 TextBoxA和TextBoxB的总和应始终为100.

这是我已经尝试过的:

static void TextBoxA_TextChanged()...
{
  int a = Convert.ToInt32(TextBoxA.Text);
  int b = Convert.ToInt32(TextBoxB.Text);
  string text = (100-a).ToString();
  TextBoxB.Text = text;
}

Static void TextBoxB_TextChanged()...
{
  int a = Convert.ToInt32(TextBoxA.Text);
  int b = Convert.ToInt32(TextBoxB.Text);
  string text = (100-b).ToString();
  TextBoxA.Text = text;
}

但它不起作用。

4 个答案:

答案 0 :(得分:1)

以下是您可以尝试的内容:

private void TextBoxA_TextChanged(object sender, EventArgs e)
{            
    int num = 0;
    if (int.TryParse(TextBoxA.Text, out num))
    {
        string text = (100 - num).ToString();
        TextBoxB.Text = text;
    }
}

private void TextBoxB_TextChanged(object sender, EventArgs e)
{
    int num = 0;
    if (int.TryParse(TextBoxB.Text, out num))
    {
        string text = (100 - num).ToString();
        TextBoxA.Text = text;
    }
}

这将在TextBox活动的TextChanged上自动完成。

enter image description here

答案 1 :(得分:0)

首先,我不知道为什么你的事件处理程序被声明为静态..它通常是:

private void TextBoxA_TextChanged(object sender, EventArgs e) { }

其次,您知道如果您有2个文本框,并且每个文本框触发另一个文本框,您将永远不会退出TextChanged事件。

为了更多地了解我,这里有一个例子:

  

1-你设置TextBoxB.text =" 1&#34 ;;
2- TextBoxB.TextChanged触发器,它   设置TextBoxA.Text =" 2&#34 ;;
3- TextBoxA.TextChanged触发器,它设置   TextBoxB.Text =" 1&#34 ;;

它继续这样,直到我相信你会得到一个记忆异常。

编辑:操作员' - '适用于数字。你不能从字符串中减去一个数字。它们必须都是数字,所以先转换它们。

编辑2:

这是我编写的代码正常

的代码
private void textBox1_TextChanged(object sender, EventArgs e)
    {
        int n;
        if (int.TryParse(textBox1.Text, out n)) // Check if the text value is a number
        {
            if (n > 100) // Since you want a sum of 100
                return;

            int m = 100 - n; // remaining

            if (textBox2.Text != m.ToString()) // to not re-trigger the TextChanged event
                textBox2.Text = m.ToString();
        }
    }

    private void textBox2_TextChanged(object sender, EventArgs e)
    {
        int n;
        if (int.TryParse(textBox2.Text, out n)) // Check if the text value is a number
        {
            if (n > 100) // Since you want a sum of 100
                return;

            int m = 100 - n; // remaining

            if (textBox1.Text != m.ToString()) // to not re-trigger the TextChanged event
                textBox1.Text = m.ToString();
        }
    }

答案 2 :(得分:0)

试试这个。这是一种更有效,更优雅的方式,我选择使用lambda表达式,而不重复方法:

    private void onChangeDoSum(object sender, EventArgs e,
                                TextBox substractNumber, TextBox sumNumber)
    {
        sumNumber.Text = (100 - Int32.Parse(substractNumber.Text)).ToString();
    }


    private void Form1_Load(object sender, EventArgs e)
    {
        textBox1.TextChanged += (a, b) => onChangeDoSum(sender, e, textBox1, textBox2);
        textBox2.TextChanged += (a, b) => onChangeDoSum(sender, e, textBox2, textBox1);
    }

或者使用Int32.TryParse来防止意外结果。

答案 3 :(得分:0)

我认为你可以做这样的事情

private void textBox1_TextChanged(object sender, EventArgs e)
    {
        textBox2.Text = (100 - Int32.Parse(textBox1.Text)).ToString();
    }

private void textBox2_TextChanged(object sender, EventArgs e)
    {
        textBox1.Text = (100 - Int32.Parse(textBox2.Text)).ToString();
    }

当我看到这个静态词时,我认为你已经尝试自己创建这些方法而忘记添加

textBox1.TextChanged += textBox1_Changed;

//我看到你写的其他帖子,它可以引发异常并掉线。当然可以。您可以使用if

之类的条件
textBox1.Text != null && textBox1.Text != ""

在更改值之前或者TryParse()方法