开发者

Components, dynamicly creation and work with them

I have to develop Windows C# application, using Visual Studio 2008. It have dynamical to create pictureboxes, to add image in it, and to move picturebox to some X position.

So, I have windows form with next components:

  1. button, with title "Add new"
  2. Combobox
  3. Text Field
  4. another button, with title "Set position".

Also, 开发者_开发知识库I have one folder with several images (png files) in it.

So, when I click on first button it have to create new PictureBox, and to add name of Picturebox into ComboBox.

After that, I can choose one PictureBox from it's list in combobox, and to move it to X position I entered into TextBox.

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!!!
        }
    }
}


You have already (successfully it seems) managed to dynamically create new PictureBox controls, add them to the form and also show their name in the ComboBox.

When you click the button, you will somehow need to "navigate" from the selected item in the ComboBox to a PictureBox. One simple way of achieving this is to use the fact that the list in a ComboBox takes any object, not only strings. So, instead of adding pb.Name to the ComboBox, you can add pb itself. This will create one small problem though; instead of the name of the picture box, the combo box will now show System.Windows.Forms.PictureBox. This can be fixed by setting the DisplayMember property of the ComboBox (this property tells the ComboBox which property value to fetch from each object and use for display):

So, you could set the DisplayMember property in the constructor of Form1:

public Form1()
{
    InitializeComponent();
    comboBox1.DisplayMember = "Name"; // use the Name property from items 
                                      // in the list when displaying them
}

Then, when creating the PictureBox controls, add them to the ComboBox:

comboBox1.Items.Add(pb);

Now you can easily pick up the PictureBox reference from the ComboBox in 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
    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜