Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从checkedListBox添加动态标签和文本框_C#_Winforms_Visual Studio_Checkedlistbox - Fatal编程技术网

C# 从checkedListBox添加动态标签和文本框

C# 从checkedListBox添加动态标签和文本框,c#,winforms,visual-studio,checkedlistbox,C#,Winforms,Visual Studio,Checkedlistbox,我有一个checkedListBox,它包含我在SQL数据库中的一些计费站的名称。我已经在checkedListBox中填入了站点名称,我希望如果您选中框中的某个项目,则在checkedListBox下方会出现一个标签,标签上的文字“Km to”+itemsChecked.StationName,以及一个文本框,您可以在其中输入到站点的公里数。 它正被用来建立一个新的充电站,而公里数就是下一个充电站的成本。 我试过这样的方法: private void stationCheckedListBox

我有一个checkedListBox,它包含我在SQL数据库中的一些计费站的名称。我已经在checkedListBox中填入了站点名称,我希望如果您选中框中的某个项目,则在checkedListBox下方会出现一个标签,标签上的文字“Km to”+itemsChecked.StationName,以及一个文本框,您可以在其中输入到站点的公里数。 它正被用来建立一个新的充电站,而公里数就是下一个充电站的成本。 我试过这样的方法:

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);
        }

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

我认为您需要在设计器中创建标签并使其可见=“False”。然后在代码中,根据需要使其可见=“True”。文本框也是如此。

我创建了一个示例程序,它似乎对我来说运行良好:

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
    /
    对象
    而不是“BetterServiceReference.Station”
  • tabPage7
    是您表单的名称吗?尝试使用
    this.Controls.Add(lbl)
我还将警告您,一旦项目被取消选中,您的函数将而不是删除标签。同样,它只会在one点中为选中的任何复选框创建one标签。这将需要一些工作来实现你想要做的事情;正如另一个答案所建议的,您最好在可见/不可见之间切换控件


但是,希望我的答案能帮助您动态创建标签,并且创建文本框也会非常类似

你可以在没有设计器的情况下添加控件。我已经尝试过了<代码>foreach(BetterServiceReference.Station项在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),但我在此处创建的新标签显示在上角,不会替换我以前的labelforeach(BetterServiceReference.Station项在stationCheckedListBox.CheckedItems中被选中){edgeLabel1.Text=“Km til”+itemsChecked.StationName;edgeLabel1.Visible=true;edgeTextBox1.Visible=true;此选项有效,但仅适用于第一个标签和文本框您确定要输入
foreach
循环吗?我不知道“BetterServiceReference.Station”是什么,但请尝试使用类似
foreach的选项(var itemChecked in stationCheckedListBox.CheckedItems)
。另外,仅供参考,您正在设置名称值两次…我使用了“foreach”(object Items Checked in stationCheckedListBox.CheckedItems)以前,我也尝试过不使用双名值。我见过有人用WPF中的一个表这样做,但我找不到任何Win表单的解决方案