C# 如何将一个整数值从5个不同的文本框传递到2个不同的文本框
我有一个Winforms应用程序,它有几个按钮。它要求用户单击一个按钮,不管他们需要多少次,该按钮1单击事件然后在textbox1中添加一个整数值,该整数值随着每次单击按钮1而递增。然后我有一个按钮2,当点击时,它会从textbox1中的整数值中减去 现在我还有textbox2、textbox3、textbox4、textbox5和textbox6,它们各自用自己的一对按钮进行加法和减法运算。他们都独立工作。Txtbox1、2、3、4、5、6是发送方 我的问题出现在尝试将txtbox1、txtbox2、txtbox3、txtbox4、txtbox5和txtbox6中的整数值传递到接收txtbox7和txtbox8时。这些txtbox中的每一个都有两个按钮,用于加值和减值。我能够将txtbox1传递值毫无问题地传递到txtbox7和txtbox8。当我使用相同的代码让所有其他txtbox将int值传递给txtbox7和txtbox8时,问题就开始了,来自6个txtbox之一的输入将相互覆盖 e、 g.如果我在txtbox1上单击5次,它会将int 5传递到txtbox1、txtbox7和txtbox8,但是如果我在txtbox2上单击2次,那么txtbox7和8的值5不会消失,而是显示新的值2。我想要发生的是,当这些按钮中的任何一个被点击时,传递到2个接收txtboxs的值需要被添加到已经存在的int值中。我不知道这是否足够解释。这是我的密码C# 如何将一个整数值从5个不同的文本框传递到2个不同的文本框,c#,winforms,C#,Winforms,我有一个Winforms应用程序,它有几个按钮。它要求用户单击一个按钮,不管他们需要多少次,该按钮1单击事件然后在textbox1中添加一个整数值,该整数值随着每次单击按钮1而递增。然后我有一个按钮2,当点击时,它会从textbox1中的整数值中减去 现在我还有textbox2、textbox3、textbox4、textbox5和textbox6,它们各自用自己的一对按钮进行加法和减法运算。他们都独立工作。Txtbox1、2、3、4、5、6是发送方 我的问题出现在尝试将txtbox1、txtb
private void button1Add_Click(object sender, EventArgs e)
{
AddToTexBox1(1);
}
private void AddToTextBox1(int changeBy)
{
if (int.TryParse(txtBox1.Text, out int value))
{
value += changeBy;
txtBox1.Text = value.ToString();
txtBox7.Text = value.ToString();
txtBox8.Text = value.ToString();
}
else
{
MessageBox.Show("Invalid Integer in TextBox!");
}
}
private void Btn2Subtract_Click(object sender, EventArgs e)
{
AddToTextBox1(-1);
}
这段代码对于txtBox 1和txtBox7&txtBox8运行良好,但当我尝试对其他txtBox使用相同的代码时,它并没有像预期的那样工作。任何帮助都将不胜感激。您当前的问题是直接对文本框中存储的值进行操作。所以当你这样做的时候:
txtBox7.Text = value.ToString();
您不检查当前存储在txtBox7中的值
因此,您可以通过以下两种途径解决此问题:
if (int.TryParse(txtBox1.Text, out int value) &&
int.TryParse(txtBox7.Text, out int oldValue7) &&
int.TryParse(txtBox7.Text, out int oldValue8)
)
{
value += changeBy;
oldValue7 += value;
oldValue8 += value;
txtBox1.Text = value.ToString();
txtBox7.Text = oldValue7.ToString();
txtBox8.Text = oldValue8.ToString();
}
如果您需要有关数据绑定的更多信息,请参阅。您必须花时间学习并习惯这种方法,但它允许您将模型逻辑与UI分离,这对复杂的模型和UI是有益的
下面是我为您的业务规则引入单独类的示例:
class MyModel
{
public int MyFirstInputValue {get; set;}
public int MySecondInputValue {get; set;}
public int MyFirstResultValue {get; private set;}
public int MySecondResultValue {get; private set;}
public void RunMyCalculationLogic()
{
// your calculations go here...
MyFirstResultValue = MyFirstInputValue + MySecondInputValue;
MySecondResultValue = MyFirstInputValue - MySecondInputValue;
}
}
然后您或多或少地使用这种模型:
var myModel = new MyModel();
myModel.MyFirstInputValue = 1; // parse value from input textBox1
myModel.MySecondInputValue = 2; // parse value from input textBox2
myModel.RunMyCalculationLogic();
// TODO: use results from MyFirstResultValue and MySecondResultValue to populate textBoxes you need
我希望这就足够让你开始了。如果你使用数字上下控件而不是文本框,你的生活会轻松得多。您可以将所有NUD设置为默认值0,为它们编写一个值更改事件处理程序(将所有NUD的值更改事件链接到同一个处理程序),该处理程序只有一行代码:
nud7.Value = nud1.Value + nud2.Value + nud3.Value ...
如果要将nud1到nud6放入构造函数中的类范围数组中,则甚至可以使用LINQ将其简化为:
nud7.Value = myNuds.Sum(n => n.Value);
这里有一个步骤-在一个新的项目中这样做。大约需要10分钟:
- 创建新的windows窗体应用程序
- 在表单上下拉8个数字
- 将它们全部选中,将其最小值和值设置为0,将最大值设置为相关值
- 仅选择前6个
- 转到属性网格,单击闪电,找到与值更改相关的事件(可能称为ValueChanged,我现在不在pc上测试),并在旁边的框中写入“AllChanged”,然后按return
- 此时会出现代码视图。将我发布的第一个代码(添加所有值并将结果存储为数字updown 7的值的代码)放入事件处理程序中
- 运行项目
注意不要将相同的事件处理程序添加到框7中;在使用了我在另一个Winforms项目中使用的一些代码后,将导致一个无限循环溢出堆栈。我找到了解决我问题的办法。这就是我所做的
TextBox[] txtbox;
public FormOne()
{
InitializeComponent();
Sqlconn con = new Sqlconn();
txtbox = new TextBox[] { txtBox1, txtBox2, txtBox3, txtBox4, txtBox5, txtBox6, txtBox7};
foreach (TextBox text in txtbox)
text.TextChanged += new EventHandler(txtbox_TextChanged);
}
private void txtbox_TextChanged(object sender, EventArgs e)
{
int value = 0;
int total = 0;
foreach (TextBox text in txtbox)
{
if (int.TryParse(text.Text, out value))
total += value;
}
txtBox7.Text = total.ToString();
txtBox8.Text = total.ToString();
private void FormOne_Load(object sender, EventArgs e)
{
}
感谢大家的支持。Stas Ivanov我尝试了您的代码,但它会导致txtbox7和8显示的数字比txtbox1上显示的数字增加5、6或9倍。换句话说,我在txtbox1上单击了两次按钮,应该传递给txtbox7和8的值应该是2,而它显示的是6。@Yorelis,您想要实现的逻辑对我来说并不完全清楚。你能在你的问题中简单而准确地描述一下规则吗?你可以做的另一件事是玩我的代码,看看你是否能让它工作。它现在给了你新的行为,对吗?斯塔斯·伊万诺夫我想要的是,在每个文本框中输入的值被传递到另外两个文本框中。在这种情况下,这些框将是txtBox7和txtBox8,它们需要来自其他文本框的值。因此,如果我在txtbox1中输入值5,然后在txtbox2中输入值4,然后在txtbox3中输入值2,在txtbox4中输入值1,在txtbox5中输入值2,在txtbox6中输入值3,那么结果将是txtbox7和txtbox8都应显示值17,但txtbox7&8是否要计算它们的总和?那么这与“加减法”有什么关系呢?Kyle Wang是的,我需要将值传递给tex