Можно ли сгруппировать несколько PictureBox? - PullRequest
0 голосов
/ 21 декабря 2018

Я могу перетащить PictureBox на элемент управления Form, Tab Control или Panel Control и т. Д. И я могу импортировать изображение в PictureBox.Однако я не знаю, как сгруппировать несколько PictureBox вместе в Visual Studio 2017. Похоже, такой функции нет.Мне нужна эта функция, потому что я хочу создать большую картинку на основе ввода пользователя.Это большое изображение состоит из нескольких маленьких изображений, видимость которых контролируется пользователем с помощью нескольких флажков.

В Excel я мог бы поместить в него несколько изображений, сгруппировать их вместе, использовать VBA для управления видимостьюкаждого изображения и, наконец, скопируйте эту группу изображений в файл Word.Я бы сделал это в проекте VSTO Word Document в Visual Studio 2017, используя vb.net.
Я добавил несколько картинок для демонстрации ожидаемой функции.
На рисунке 1 показаны маленькие картинки, которые будут использоваться в большомкартина.(Пожалуйста, игнорируйте файл .vslx)
На рисунке 2 показан возможный результат, основанный на вводе пользователя.

1 Ответ

0 голосов
/ 22 декабря 2018

Вы можете сделать свой собственный контроль.Вот пример / предложение, как это сделать с User control, который можно повторно использовать в вашем приложении.пользовательский элемент управления удерживает панели в матрице, вы можете установить перетаскивание Event для каждого Panel элемента управления, и пользователь сможет поместить графическое окно на каждую панель:

УПРАВЛЕНИЕ ПОЛЬЗОВАТЕЛЕМ:

Public Class UserControl1

    Public NumberOfPanelsInRow As Integer
    Sub New(ByVal height As Integer, width As Integer, Optional ByVal numberofPanelsInRow As Integer = 3)

        ' This call is required by the designer.'
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.'
        Me.Height = height
        Me.Width = width
        Me.NumberOfPanelsInRow = numberofPanelsInRow
    End Sub

    Private Sub UserControl1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' grouped panels to hold picturebox you can drag & drop to them...'
        Dim panelHeight As Integer = Me.Height / NumberOfPanelsInRow
        Dim panelWidth As Integer = Me.Width / NumberOfPanelsInRow
        Dim colors() As Color = {Color.Pink, Color.Black, Color.Red, Color.Cyan, Color.Green, Color.Orange,
            Color.Red, Color.Pink, Color.Black, Color.Red, Color.Cyan, Color.Green, Color.Orange, Color.Red}
        Dim total As Integer = NumberOfPanelsInRow * NumberOfPanelsInRow
        Dim currentYlocation As Integer = 0
        Dim currentXlocation As Integer = 0
        Dim location As Point = New Point(0, currentYlocation)
        Dim rowcounter As Integer = 0
        Dim itemcounter As Integer = 0
        For i = 1 To total

            If rowcounter >= NumberOfPanelsInRow Then
                rowcounter = 0
                currentYlocation += panelHeight
                currentXlocation = 0
            End If

            ' to each one of this panel you can drag a picture box'
            Dim p As New Panel
            p.Size = New Size(panelWidth, panelHeight)
            p.Location = New Point(currentXlocation, currentYlocation)
            p.BackColor = colors(itemcounter)
            Me.Controls.Add(p)

            rowcounter += 1
            itemcounter += 1
            currentXlocation += panelWidth
        Next

    End Sub

End Class

ВЫЗОВ КОНТРОЛЯ ПОЛЬЗОВАТЕЛЯ ИЗ ФОРМЫ1:

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim uc = New UserControl1(300, 300)
        Me.Controls.Add(uc)
    End Sub
End Class

ВЫХОД GUI:

enter image description here

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