c# - 关联控件的简单方法 C#
问题描述
我有一列 10 个文本框和另一列 10 个标签。我希望每个Label
都是左侧的和常数 K 之间的乘积TextBox
(当TextBox
完成时)。
我在想一种方法来编写一个函数来处理 textBoxs 的所有事件Leave
,并更改关联的标签。
有没有一种简单的方法可以知道Label
要更改哪个而不需要将发件人与每个人进行比较TextBoxt
?
我希望我能理解自己,提前谢谢
解决方案
使用 TableLayoutPanel
使用 a 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
绑定到DataTable
. DataTable
可以有一个 int 列和一个 expression 列。
const int K = 10;
private void Form1_Load(object sender, EventArgs e)
{
var dt = new DataTable();
dt.Columns.Add("C1", typeof(int));
dt.Columns.Add("C2", typeof(int), $"C1 * {K}");
dt.Rows.Add(1);
dt.Rows.Add(2);
dt.Rows.Add(3);
dataGridView1.DataSource = dt;
}
要了解表达式格式,请查看DataColumn.Expression
.
推荐阅读
- git - 克隆后自动做某事
- jenkins - 在拉取请求上触发 Jenkins 流水线
- arrays - Kotlin - 数组中重复元素的索引
- javascript - 每个函数调用在浏览器中的内存管理?
- python - Python如何在将字段文本转换为小写后在一列数据表中找到关键字?
- python - 在 python 中绘制费米-狄拉克分布
- ios - “无法将类型 freddy '[JSON]' 的值分配给类型 '[NSString]'
- c - 此模块的调试信息中缺少源信息(免费功能)
- python - 使用带有递归的 Python 构建目录结构
- reactjs - React 应用程序在部署到 GCP 时出现 404 错误