C# 基于另一个文本框文本填充文本框
我有TextBoxA和TextBoxB。我想做的是,每当我在TextBoxA中输入一个数字(是的,两个textbox的值都是整数)时,TextBoxB应该使用值(100 TextBoxA)来“自动完成”。TextBoxB也是如此。TextBoxA和TextBoxB的总和应始终为100 以下是我已经尝试过的: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
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…如果这回答了您的问题,请确保将其标记为已解决:)