我有一列包含10个文本框,另一列包含10个标签。我希望每个Label
是其左侧TextBox
与常数K(在TextBox
完成时)之间的乘积。
我在想一种方法来编写一个函数来处理文本框Leave
的所有事件,并更改关联的标签。
是否有一种简单的方法就可以知道要更改哪个Label
而无需将发送者与每个TextBoxt
进行比较?
我希望我能使自己理解,在此先感谢
答案 0 :(得分:1)
使用TableLayoutPanel
使用TableLayoutPanel
,将所有文本框添加到第一列,并将所有标签添加到第二列。然后使用一个事件处理程序处理所有文本框的Validating
事件。
const int K = 10;
private void TextBoxes_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
var txt = (TextBox)sender;
if (int.TryParse(txt.Text, out int value))
{
var row = tableLayoutPanel1.GetRow(txt);
var lbl = tableLayoutPanel1.GetControlFromPosition(1, row);
lbl.Text = $"{value * K}";
}
}
您可以使用TableLayoutPanel
方法根据位置查找控件,也可以使用GetRow
,GetColumn
,GetPositionFromControl
,GetControlFromPosition
查找控件的位置
使用DataGridView
另一种选择是使用绑定到DataGridView
的{{1}}控件。 DataTable
可以有一个int列和一个expression列。
DataTable
要了解表达式格式,请查看DataColumn.Expression
。
答案 1 :(得分:1)
我将使用几个数组,并执行以下操作:
var labels = new[] { label1, label2, label3, label4, label5, label6, label7, label8, label9, label10, };
var textBoxes = new[] { textBox1, textBox2, textBox3, textBox4, textBox5, textBox6, textBox7, textBox8, textBox9, textBox10, };
for (int i = 0; i < 10; i++)
{
var textBox = textBoxes[i];
var label = labels[i];
textBox.Leave += (_s, _e) => label.Text = (double.Parse(textBox.Text) * 3.14159).ToString();
}
答案 2 :(得分:1)
制作包含1个TextBox和1个Lable的新对象 在此新对象中编写所有函数和处理程序 在项目中使用此新对象,而不是标准TextBox和Lable 它们每个都可以单独工作,不需要为它们编写任何控制代码
答案 3 :(得分:0)
给他们一个共同的阶级。为此创建一个JavaScript处理程序,并使用$(this)访问事件中的特定文本框。要访问标签,您可以使用.Closest()函数。