3 回答
TA贡献1780条经验 获得超3个赞
您当前的问题是直接对文本框中存储的值进行操作。所以当你这样做时:
txtBox7.Text = value.ToString();
您不检查当前存储在 txtBox7 中的值。
所以你可以按照2条路径来解决它:
使用与 int 相同的解析从 txtBox7 中获取值并将其放入变量中,然后向该变量添加值并然后将其保存回目标文本框。
您可以在逻辑背后有一些模型(如果这些数字代表某些东西)并更新模型(通过根据您的“业务”规则将数字放入模型的属性中)。之后,通过将模型中的值放入文本框,将 UI(文本框)与模型同步。理想情况下,您希望为其使用数据绑定(以便在模型更改后自动刷新您的 UI)。
以下是 1 的代码示例:
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
我希望这足以让您开始。
TA贡献1829条经验 获得超7个赞
如果您使用 NumericUpDown 控件而不是文本框,您的生活会轻松得多。您可以将所有 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,我现在不在电脑上进行测试)并写入“AllChanged”在旁边的框中按回车键
出现代码视图。将我发布的第一个代码(添加所有值并将结果存储在数字 updown 7 的值中的代码)放在事件处理程序中
运行项目
我不确定为什么你有两个总计框..但我相信你可以解决这个问题
注意不要将相同的事件处理程序添加到框 7;你会导致无限循环,导致堆栈溢出
TA贡献1799条经验 获得超9个赞
在尝试了我在另一个 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)
{
}
感谢大家的支持。
- 3 回答
- 0 关注
- 132 浏览
添加回答
举报