我必须使用Visual Studio 2008开发Windows C#应用程序。它有动态创建图片框,在其中添加图像,以及将图片框移动到某个X位置。
所以,我的窗体有下一个组件:
另外,我有一个包含多个图像(png文件)的文件夹。
因此,当我点击第一个按钮时,它必须创建新的PictureBox,并将Picturebox的名称添加到ComboBox。
之后,我可以从组合框中的列表中选择一个PictureBox,并将其移动到我输入TextBox的X位置。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace DynamicComponents
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int imgCounter = 0;
/*
* Create pictureboxes and add images
*/
private void button1_Click(object sender, EventArgs e)
{
PictureBox pb = new PictureBox();
pb.Name = "PictureBox" + (++imgCounter);
pb.Size = new Size(100, 100);
pb.Image = Image.FromFile(@"C:\slike\" + imgCounter.ToString() + ".png");
this.Controls.Add(pb);
comboBox1.Items.Add(pb.Name);
}
/*
* Move PictureBox on X position I entered into textfield
* */
private void button2_Click(object sender, EventArgs e)
{
// help!!!
}
}
}
答案 0 :(得分:0)
您已经(成功地)设法动态创建新的PictureBox
控件,将它们添加到表单中,并在ComboBox
中显示其名称。
当您点击该按钮时,您将需要从ComboBox
中的所选项目“导航”到PictureBox
。实现此目的的一种简单方法是使用ComboBox
中的列表接受任何对象而不仅仅是字符串的事实。因此,您可以添加pb.Name
本身,而不是将ComboBox
添加到pb
。这会产生一个小问题;而不是图片框的名称,组合框现在将显示System.Windows.Forms.PictureBox
。这可以通过设置ComboBox
的{{3}}属性来修复(此属性告诉ComboBox
从每个对象获取哪个属性值并用于显示):
因此,您可以在DisplayMember
的构造函数中设置Form1
属性:
public Form1()
{
InitializeComponent();
comboBox1.DisplayMember = "Name"; // use the Name property from items
// in the list when displaying them
}
然后,在创建PictureBox
控件时,将它们添加到ComboBox
:
comboBox1.Items.Add(pb);
现在,您可以轻松地从PictureBox
中的ComboBox
获取button2_Click
引用:
private void button2_Click(object sender, EventArgs e)
{
PictureBox selectedPictureBox = comboBox1.SelectedItem as PictureBox;
if (selectedPictureBox != null)
{
// use selectedPictureBox to set the appropriate property values
}
}