C# 从checkedListBox添加动态标签和文本框
我有一个checkedListBox,它包含我在SQL数据库中的一些计费站的名称。我已经在checkedListBox中填入了站点名称,我希望如果您选中框中的某个项目,则在checkedListBox下方会出现一个标签,标签上的文字“Km to”+itemsChecked.StationName,以及一个文本框,您可以在其中输入到站点的公里数。 它正被用来建立一个新的充电站,而公里数就是下一个充电站的成本。 我试过这样的方法:C# 从checkedListBox添加动态标签和文本框,c#,winforms,visual-studio,checkedlistbox,C#,Winforms,Visual Studio,Checkedlistbox,我有一个checkedListBox,它包含我在SQL数据库中的一些计费站的名称。我已经在checkedListBox中填入了站点名称,我希望如果您选中框中的某个项目,则在checkedListBox下方会出现一个标签,标签上的文字“Km to”+itemsChecked.StationName,以及一个文本框,您可以在其中输入到站点的公里数。 它正被用来建立一个新的充电站,而公里数就是下一个充电站的成本。 我试过这样的方法: private void stationCheckedListBox
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)代码>
但是,希望我的答案能帮助您动态创建标签,并且创建文本框也会非常类似 你可以在没有设计器的情况下添加控件。我已经尝试过了<代码>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表单的解决方案