我有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;
}
但它不起作用。
答案 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
上自动完成。
答案 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()方法