所以这可能是一个非常基本的问题,但我正在将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);
}
}
}
答案 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);