Как динамически добавить метку или другой элемент на панель формы Windows? - PullRequest
6 голосов
/ 17 января 2011

Так что это, вероятно, довольно простой вопрос, но я работаю с перетаскиванием элементов ListBox на панель, которая будет создавать компоненты в зависимости от значения.

В качестве простого примера мне нужно, чтобы он мог создавать новую метку на панели, когда элемент из ListBox перетаскивается на панель.

У меня есть следующий код, но я не уверен, как динамически добавить метку на панель после ее удаления.

Вот мой пример кода ...

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 ]

17 голосов
/ 17 января 2011
    //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 это что-то еще.

4 голосов
/ 06 февраля 2011

заменить

panel1.Container.Add(newLabel);

от

panel1.Controls.Add(newLabel); 

Я думаю, что это добавит объект newLabel на панель

0 голосов
/ 17 января 2011

Я полагаю, вам все равно нужно добавить метку к ControlCollection формы, чтобы она отображалась. Поэтому добавьте что-то вроде следующего в конец метода DragDrop:

this.Controls.Add(newLabel);
0 голосов
/ 17 января 2011

Я думаю, что Visible установлен в True по умолчанию, но очень возможно, что вам нужно обновить панель после добавления метки, чтобы увидеть метку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...