【问题标题】:setting label.text based on its location property in a groupbox根据 groupbox 中的 location 属性设置 label.text
【发布时间】:2016-10-03 12:04:31
【问题描述】:

我正在使用 C# 和 windows 窗体,我有一个包含 20 个标签的组框(顶行 10 个,底行 10 个)。

我想根据它们在组框中的位置坐标设置这些标签的 Text 属性。同一行所有标签的Y坐标保持不变,只有X坐标发生变化。

Example locations:

label1.Location is (6,16), label2.Location is (33,16) ... label10.Location is (150,16)

label11.Location is (6,43), label12.Location is (33,43) ... label20.Location is (150,43)

现在 label.Text 最初设置为 label_[int a]_[int b] 其中int a 是一个介于 1 和 10 之间的数字以显示其“列”编号,int b 是 1 OR 2为其“行”号。

现在这一切都很好,但我需要 60 个分组框,每个分组框有 20 个标签,重命名每个分组非常痛苦,这就是 id 喜欢这样做的原因。

之所以这样设置,是因为每个“列”在顶行或底行中都只有一个数字。

现在我的第一个问题是; 是否可以通过其位置属性设置文本属性?

第二,stackoverflow 蜂巢思维能想出更好/更有效的方法吗?

注意: 我已尝试将标签加载到列表中以尝试使用循环,但这会在选择适当的标签时产生复杂性。

我正在尝试开发一种可以在每个分组框上单独使用的方法。

虽然这一切在我看来都是有道理的,但我并没有立即看到我可以提供什么其他信息。

【问题讨论】:

  • 首先,这对我来说没有意义“我有一个包含 12 个标签的组框(顶行 10 个,底行 10 个)”。我可能已经上过几节数学课,但我想我记得 10 + 10 等于 20 而不是 12。其次,通常,创建一个将容器作为参数的方法,并让它循环遍历子元素以设置标签。

标签: c# winforms location label


【解决方案1】:

对我来说,这听起来像是用户控件的一个很好的候选者。

设计一个带有分组框和标签的用户控件。 将您需要的操作暴露在外部。可能是将命名约定设置为对您更有意义的好时机。

另一种方法可能是从代码生成标签,而不是像@Kevin 所说的那样在设计时生成标签。创建一个方法,它可以为您提供 groupbox 和您需要的其他值。然后根据需要设置标签名称和位置(查看设计器文件)。

【讨论】:

  • 绝对是我正在寻找的回复,现在尝试一下,看看它是否按我需要的方式工作,想看看其他人在我将此标记为我的答案之前想出什么,谢谢你,甚至没有考虑自定义控件 +1
【解决方案2】:

我想可以尝试对 GroupBox.Controls 进行 foreach,并且您也可以在此 foreach 中检查它们的名称。示例:

foreach(Label lbl in groupBox1.Controls
{
   if (lbl.Name.Contains("[int_a]_[int_b]"))
   {
      lbl.Text = "Label Text";
   }  
}

我想这可以为您提供所需的基础

【讨论】:

    猜你喜欢
    • 2017-01-10
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 2011-06-24
    相关资源
    最近更新 更多