Компоненты, динамическое создание и работа с ними - PullRequest
0 голосов
/ 28 января 2010

Мне нужно разработать приложение для Windows C #, используя Visual Studio 2008. Оно имеет динамическое создание ящиков для картинок, добавление в них изображений и перемещение картинки в какое-то положение X.

Итак, у меня есть окно формы со следующими компонентами:

  1. , с заголовком «Добавить новый»
  2. выпадающий
  3. Текстовое поле
  4. еще одна кнопка с заголовком «Установить положение».

Также у меня есть одна папка с несколькими изображениями (png-файлами).

Итак, когда я нажимаю на первую кнопку, он должен создать новый PictureBox и добавить имя Picturebox в ComboBox.

После этого я могу выбрать один PictureBox из его списка в выпадающем списке, и переместить его в положение X, которое я ввел в 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!!!
        }
    }
}

1 Ответ

0 голосов
/ 28 января 2010

Вы уже (кажется, успешно) сумели динамически создать новые PictureBox элементы управления, добавить их в форму и также показать их имя в ComboBox.

Когда вы нажимаете кнопку, вам как-то нужно «перейти» от выбранного элемента в ComboBox к PictureBox. Один простой способ добиться этого - использовать тот факт, что список в ComboBox принимает любой объект, а не только строки. Таким образом, вместо добавления pb.Name к ComboBox, вы можете добавить pb сам. Это создаст одну маленькую проблему; вместо имени графического блока в поле со списком теперь будет отображаться System.Windows.Forms.PictureBox. Это можно исправить, установив свойство DisplayMember для ComboBox (это свойство сообщает 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...