Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于另一个文本框文本填充文本框_C#_Textbox_Uwp - Fatal编程技术网

C# 基于另一个文本框文本填充文本框

C# 基于另一个文本框文本填充文本框,c#,textbox,uwp,C#,Textbox,Uwp,我有TextBoxA和TextBoxB。我想做的是,每当我在TextBoxA中输入一个数字(是的,两个textbox的值都是整数)时,TextBoxB应该使用值(100 TextBoxA)来“自动完成”。TextBoxB也是如此。TextBoxA和TextBoxB的总和应始终为100 以下是我已经尝试过的: static void TextBoxA_TextChanged()... { int a = Convert.ToInt32(TextBoxA.Text); int b = Con

我有TextBoxA和TextBoxB。我想做的是,每当我在TextBoxA中输入一个数字(是的,两个textbox的值都是整数)时,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;
}

但是它不起作用。

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

private void TextBoxA_TextChanged(object sender, EventArgs e) { }
其次,你知道如果你有两个文本框,每一个都会触发另一个,你永远不会退出TextChanged事件

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

1-设置TextBoxB.text=“1”
2-TextBoxB.TextChanged触发器,它 设置TextBoxA.Text=“2”
3-TextBoxA.TextChanged触发器,它设置 TextBoxB.Text=“1”

它一直这样,直到我相信你会得到一个例外的记忆

编辑:运算符“-”处理数字。不能从字符串中减去数字。它们必须是两个数字,所以首先转换它们

编辑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();
        }
    }

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

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
上自动完成


试试这个。这是一种更高效、更优雅的方法,我选择使用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
来防止意外结果。

我认为您可以这样做

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;
//我看到另一篇文章,你写道它可能引发异常并导致崩溃。当然可以。如果条件允许,您可以使用

textBox1.Text != null && textBox1.Text != ""

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

哪个部分不工作?你说“不行”是什么意思?相反会发生什么?如果您单步执行代码会发生什么。。另外,如果不将(100-b)包装在
中,则无法编写(100-b)。显示每个文本框中的值,文本框中的值是字符串,因此我认为不需要使用声明为int的变量。。当您试图传递
(100-b)
时,请使用string.Concat或string.Join或仅将值保持为其原始状态。。这些值是
字符串
如果我错了,请更正我,但这不会导致某种循环,因为一旦一个文本框改变,另一个就会改变…导致另一个改变…等等?第一个是我的错误。。道歉!我认为它不会永远“循环”,因为当两个文本框都有正确的值时,我使用一个按钮将这些值发送到两个文本块。我现在的问题是,如果我写错了什么,并试图用键盘擦除当前值,那么应用程序关闭是什么错误导致了“应用程序关闭?”
其他信息:输入字符串的格式不正确。
?我编辑了答案并添加了我写的代码,textbox1是a,textbox2是B,试试看,告诉我这是否是你需要的^^^好吧,我在下面使用了Rakitic的答案,它对自动完成部分起到了作用。。但我现在的问题是,有时候我可能会让textboxA值为100,textboxB值为25。。很抱歉让你困惑,当我说总和“永远”是100如果textboxA的值是100,那么textboxB的值将是0否?怎么可能是25^^^即使
文本框
的总和始终为100…如果这回答了您的问题,请确保将其标记为已解决:)