【问题标题】:Add dynamic labels and textboxes from a checkedListBox从 checkedListBox 添加动态标签和文本框
【发布时间】:2012-12-13 19:42:13
【问题描述】:

我有一个checkedListBox,其中包含我在SQL 数据库中拥有的一些充电站的名称。我已经用车站名称填充了checkedListBox,我希望如果你选中框中的一个项目,一个带有文本“Km to”+itemsChecked.StationName的标签会出现在checkedListbox的下方,以及一个文本框,在那里,人们将进入到车站的公里处。 它被用来创建一个新的充电站,公里数是到下一个充电站的边缘成本。 我尝试过这样的事情:

private void stationCheckedListBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        foreach (BetterServiceReference.Station itemsChecked in stationCheckedListBox.CheckedItems)
        {
            var lbl = new Label();
            lbl.Name = "lblAuto" + itemsChecked.StationId;
            lbl.Text = "Km to " + itemsChecked.StationName;
            lbl.AutoSize = true;
            lbl.Location = new Point(33, 462);
            lbl.Name = "label1";
            lbl.Size = new Size(35, 13);
            tabPage7.Controls.Add(lbl);
        }

只是它实际上并没有创建标签。

【问题讨论】:

  • 您确定要进入foreach 循环吗?我不知道“BetterServiceReference.Station”是什么,但请尝试使用foreach(var itemChecked in stationCheckedListBox.CheckedItems) 之类的东西。另外,仅供参考,您将名称值设置两次...
  • 我之前使用过'foreach(object itemsChecked in stationCheckedListBox.CheckedItems)',结果相同。我也尝试过不使用双名称值。
  • 我看到有人用 WPF 中的表格来做这件事,但我找不到任何 Win Forms 的解决方案

标签: c# winforms visual-studio checkedlistbox


【解决方案1】:

我创建了一个示例程序,它对我来说似乎工作正常:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            foreach (var item in checkedListBox1.CheckedItems)
            {
                Label lbl = new Label();
                lbl.Text = "Testing";
                lbl.Location = new Point(125, 125);
                this.Controls.Add(lbl);
            }
        }
    }

需要检查/尝试的一些事情:

  • 确保您的标签位置不在其他控制之下!!
  • 使用var / object 而不是“BetterServiceReference.Station”
  • tabPage7 是您的表单名称吗?尝试使用this.Controls.Add(lbl);

我还会警告您,一旦取消选中某个项目,您的函数将不会删除标签。此外,它只会在 one 位置为选中的任何复选框创建 one 标签。实现你想要做的事情需要做一些工作;正如另一个答案所建议的那样,您最好在可见/不可见之间切换控件。

但是,希望我的回答能帮助您动态创建标签,并且创建文本框将非常相似。

【讨论】:

    【解决方案2】:

    我认为您需要在设计器中创建标签并将其设为 Visible="False"。然后在您的代码中,根据需要将其设为 Visible="True"。与文本框相同。

    【讨论】:

    • 您可以在没有设计器的情况下添加控件。
    • 我试过了。 foreach (BetterServiceReference.Station itemsChecked in stationCheckedListBox.CheckedItems) { int i = 1; var lbl = new Label(); lbl.Name = "edgeLabel" + i; lbl.Text = "Km til " + itemsChecked.StationName; lbl.Visible = true; tabPage7.Controls.Add(lbl); i++; } 设置为 Visible=False 的标签称为 edgeLabel1(以及 2 和 3),但我在此处创建的新标签显示在顶角,并且不会替换我以前的标签
    • foreach (BetterServiceReference.Station itemsChecked in stationCheckedListBox.CheckedItems) { edgeLabel1.Text = "Km til " + itemsChecked.StationName; edgeLabel1.Visible = true; edgeTextBox1.Visible = true;这有效,但仅适用于第一个标签和文本框
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2019-04-20
    相关资源
    最近更新 更多