Изменять размер панели динамически - PullRequest
6 голосов
/ 10 марта 2010

Я реализую приложение, которое требует перетаскивания блоков изображений на панели. Блоки изображений динамически добавляются из программы, поэтому я установил для свойства autoscroll значение true на панели. Но когда я перетаскиваю поля на Внизу панели размер панели уменьшен. Я установил в панели свойство autosize false. Панель закреплена на другой панели. Я хочу установить размер панели во время выполнения. Как можно этого добиться.

public form1(int[,] dummy, int columnSize, int rowSize)
   {
       this.dummy= dummy;
       numOfColumns = columnSize;
        numOfRows = rowSize;
        getData();
        addIds = addIdArray;
        data = mylist;
        InitializeComponent();
        //panel1.MinimumSize = new Size(columnSize * 40, rowSize * 40);
        //panel1.Height = rowSize * 40;
        //panel1.Width = columnSize * 40;
        //panel4.Height = rowSize * 40;
        //panel4.Width = columnSize * 40;
        int x, y;
        Structures.EmptyRectSpace space = new Structures.EmptyRectSpace();
        for (int i = 0; i < data.Count; i++)// set picture boxes 
        {
            space = (Structures.EmptyRectSpace)data[i];
            x = space.startingJ;
            y = space.startingI;
            int h, w;
            h = space.length;
            w = space.width;

             p = new PictureBox();
                p.Width = w * 40;
                p.Height = h * 40;
                p.BackColor = Color.DarkGreen;
                p.Image = Properties.Resources.v;
                p.BorderStyle = BorderStyle.FixedSingle;
                p.Name = addIdArray[i].ToString();
                p.Location = new Point((x + 1 - w) * 40, (y + 1 - h) * 40);

                this.panel1.Controls.Add(p);
        }

        foreach (Control c in this.panel1.Controls)
        {
            if (c is PictureBox)
            {
                c.MouseDown += new MouseEventHandler(pictureBox1_MouseDown);
            }
        }
        this.panel1.DragOver += new System.Windows.Forms.DragEventHandler(this.panel1_DragOver);
        panel1.DragOver += new DragEventHandler(panel1_DragOver);
        panel1.DragDrop += new DragEventHandler(panel1_DragDrop);
        panel1.AllowDrop = true;
        panel2.AllowDrop = true;
        foreach (Control c in this.panel2.Controls)
        {
            c.MouseDown += new MouseEventHandler(pictureBox1_MouseDown);
        }
        this.panel2.DragOver += new System.Windows.Forms.DragEventHandler(this.panel2_DragOver);
        panel2.DragOver += new DragEventHandler(panel2_DragOver);
        panel2.DragDrop += new DragEventHandler(panel2_DragDrop); 
    }

Это конструктор формы, содержащей панель. Когда он загружен, на панель должны быть добавлены графические блоки и там реализованы события перетаскивания панели.

Пожалуйста, дайте мне руку помощи ..

Ответы [ 2 ]

7 голосов
/ 08 мая 2012

Я не смог бы заставить это работать, пока я не установил максимальную ширину программно в коде. Неважно, какая максимальная ширина была в конструкторе (или если максимальная ширина была даже установлена).

int newWidth = 200;
panel.MaximumSize = new Size(newWidth, panel.Height);
panel.Size = new Size(newWidth, panel.Height);
2 голосов
/ 10 марта 2010

Не можете ли вы достичь этого с помощью свойств Panel.Height и Panel.Width?

В противном случае, если вы хотите указать минимальный размер для вашей панели динамически, вы можете сделать это с помощью метода SetMinimumSize, если я не ошибаюсь. Это то, что вы ищете?

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