如何动态地向Windows窗体面板添加标签或其他元素?

时间:2011-01-17 18:27:02

标签: c# .net windows winforms

所以这可能是一个非常基本的问题,但我正在将ListBox项目拖放到一个面板上,该面板将根据值创建组件。

作为一个简单的例子,我需要它能够在ListBox中的项目被放到面板上时在面板上创建一个新的标签。

我有以下代码,但我不知道如何在删除后将Label动态添加到面板。

这是我的示例代码......

namespace TestApp
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

    }

    private void Form1_Load(object sender, EventArgs e)
    {
        listBox1.Items.Add("First Name");
        listBox1.Items.Add("Last Name");
        listBox1.Items.Add("Phone");
    }

    private void listBox1_MouseDown(object sender, MouseEventArgs e)
    {
        ListBox box = (ListBox)sender;
        String selectedValue = box.Text;
        DoDragDrop(selectedValue.ToString(), DragDropEffects.Copy);
    }

    private void panel1_DragEnter(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(DataFormats.Text))
        {
            e.Effect = DragDropEffects.Copy;
        }
        else
        {
            e.Effect = DragDropEffects.None;
        }
    }

    private void panel1_DragDrop(object sender, DragEventArgs e)
    {
        Label newLabel = new Label();
        newLabel.Name = "testLabel";
        newLabel.Text = e.Data.GetData(DataFormats.Text).ToString();

        //Do I need to call either of the following code to make it do this?
        newLabel.Visible = true;
        newLabel.Show();

        panel1.Container.Add(newLabel);
    }
}

}

4 个答案:

答案 0 :(得分:17)

    //Do I need to call either of the following code to make it do this?
    newLabel.Visible = true;
    newLabel.Show();

是不必要的。


newLabel.AutoSize = true;
很可能,

需要给它一个大小。


    panel1.Container.Add(newLabel);

必须替换为

    newLabel.Parent = panel1;

但是,除非拖拽不起作用,否则您的方法应该有效。


发现错误。它必须是panel1.Controls.Add(newLabel);newLabel.Parent = panel1;而不是panel1.Container.Add(newLabel);Container是另一回事。

答案 1 :(得分:4)

替换

panel1.Container.Add(newLabel);

通过

panel1.Controls.Add(newLabel); 

我认为它会将newLabel对象添加到面板

答案 2 :(得分:0)

我认为默认情况下Visible设置为True,但是在添加标签后才需要刷新面板才能看到标签。

答案 3 :(得分:-2)

我相信您仍然需要将标签添加到表单的ControlCollection以便呈现。因此,在DragDrop方法的末尾添加如下内容:

this.Controls.Add(newLabel);