首页 > 解决方案 > 关联控件的简单方法 C#

问题描述

我有一列 10 个文本框和另一列 10 个标签。我希望每个Label都是左侧的和常数 K 之间的乘积TextBox(当TextBox完成时)。

我在想一种方法来编写一个函数来处理 textBoxs 的所有事件Leave,并更改关联的标签。

有没有一种简单的方法可以知道Label要更改哪个而不需要将发件人与每个人进行比较TextBoxt

我希望我能理解自己,提前谢谢

标签: c#.netwinformsevent-handling

解决方案


使用 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.


推荐阅读