Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
9 / 7 / 2
Регистрация: 23.06.2014
Сообщений: 54

Применение матрицы к программно созданному PictureBox

12.01.2020, 14:07. Показов 1492. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Столкнулся с такой проблемой.
Есть массив элементов PictureBox и есть матрица, которая меняет его свойства. К Box'ам, созданным вручную, она легко применяется, а вот к элементам массива - нет. Подскажите, как можно выйти из этой ситуации. Примеры кода прилагаю. Извиняюсь, если продублировал существующую тему.

Это матрица.

VB.NET
1
2
3
4
5
6
    Public Function mx(ByVal x_min As Double, ByVal x_max As Double, ByVal y_max As Double, ByVal y_min As Double, ByVal h As Integer, ByVal w As Integer)
        Dim sc As New Matrix
        sc.Translate(-x_min, -y_min, MatrixOrder.Append)
        sc.Scale(sc_x(x_min, x_max, w), sc_y(y_max, y_min, h), MatrixOrder.Append)
        Return sc
    End Function
Так создаю массив.

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        Dim pan_res(DataGridView1.ColumnCount - 1, DataGridView1.ColumnCount - 1) As PictureBox
        For i = 0 To DataGridView1.ColumnCount - 1
            For j = 0 To i
                pan_res(i, j) = New PictureBox
                With pan_res(i, j)
                    .Left = 5 + size_x * j
                    .Top = 5 + size_y * i
                    .Width = size_x
                    .Height = size_y
                    .BorderStyle = BorderStyle.Fixed3D
                End With
                TabPage2.Controls.Add(pan_res(i, j))
            Next
        Next
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.01.2020, 14:07
Ответы с готовыми решениями:

Добавление события к программно созданному элементу управления
Доброго времени суток. Обращаюсь на форум с таким вопросом: к примеру у меня есть код на программное добавление элемента управления на...

Как определить, по какому программно созданному Label кликнули
Доброе утро! Помогите пожалуйста (сам не могу разобраться) решить такую проблему: есть массив программно созданных Label у которых задан...

Обращение к динамически созданному pictureBox
Здравствуйте, помогите пожалуйста со следующей проблемой. Создаю несколько динамических pictureBox следующим образом: private:...

4
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
12.01.2020, 17:51
Цитата Сообщение от shm2013 Посмотреть сообщение
Столкнулся с такой проблемой.
Не вижу проблемы. Использовал массив массивов т.к. используется только нижний треугольник.
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Imports System.Drawing.Drawing2D
Public Class Form1
    Private nn, size_x, size_y As Integer
    Private pbSet()() As PictureBox
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        nn = 3
        size_x = 66
        size_y = 66
        ReDim pbSet(nn - 1)
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        For i = 0 To nn - 1
            For j = 0 To i
                ReDim pbSet(i)(j)
                pbSet(i)(j) = New PictureBox
                With pbSet(i)(j)
                    .Left = 5 + size_x * j
                    .Top = 5 + size_y * i
                    .Width = size_x
                    .Height = size_y
                    .BorderStyle = BorderStyle.Fixed3D
                    .BackColor = Color.FromKnownColor(45 + i + 2 * j)
                End With
                Me.Controls.Add(pbSet(i)(j))
            Next
        Next
        Me.Invalidate()
    End Sub
    Public Function mx(ByVal x_min As Double, ByVal x_max As Double, ByVal y_min As Double, ByVal y_max As Double, _
                       ByVal h As Integer, ByVal w As Integer) As Matrix
        Dim sc As New Matrix
        sc.Translate(-x_min, -y_min, MatrixOrder.Append)
        sc.Scale(2, 0.5, MatrixOrder.Append)
        Return sc
    End Function
    Private Sub Form1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        Dim pb As PictureBox
        Dim g As Graphics
        For Each ctr As Control In Me.Controls
            If ctr.GetType() Is GetType(PictureBox) Then
                pb = CType(ctr, PictureBox)
                g = Graphics.FromHwnd(pb.Handle)
                g.Transform = mx(-10, nn, -40, nn, nn, nn)
                g.FillRectangle(Brushes.Red, -1, -1, 20, 20)
                g.DrawRectangle(Pens.Black, -1, -1, 20, 20)
            End If
        Next
    End Sub
End Class
Изображения
 
0
9 / 7 / 2
Регистрация: 23.06.2014
Сообщений: 54
12.01.2020, 18:20  [ТС]
ovva, спасибо за ответ.
А нельзя это сделать в одном цикле? Чтобы и создание элементов, и применение матрицы? В планах было загнать всё это в отдельную функцию.
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
12.01.2020, 20:34
Лучший ответ Сообщение было отмечено shm2013 как решение

Решение

Цитата Сообщение от shm2013 Посмотреть сообщение
А нельзя это сделать в одном цикле? Чтобы и создание элементов, и применение матрицы?
Переопределите класс PictureBox например так
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Class myPictBox
    Inherits PictureBox
    Public Sub New()
        MyBase.new()
    End Sub
    Public Property Mtr As Matrix
    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
        Dim g As Graphics = e.Graphics
        g.Transform = _Mtr
        g.FillRectangle(Brushes.Red, -5, -10, 30, 30)
        g.DrawRectangle(Pens.Black, -5, -10, 30, 30)
    End Sub
End Class
Тогда
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    For i = 0 To nn - 1
        For j = 0 To i
            ReDim pbSet(i)(j)
            pbSet(i)(j) = New myPictBox
            With pbSet(i)(j)
                .Left = 5 + size_x * j
                .Top = 5 + size_y * i
                .Width = size_x
                .Height = size_y
                .BorderStyle = BorderStyle.Fixed3D
                .BackColor = Color.FromKnownColor(45 + i + 2 * j)
                .Mtr = mx(-10, 50, -40, 50, 50, 50)
            End With
            Me.Controls.Add(pbSet(i)(j))
        Next
    Next
    Me.Invalidate()
End Sub
PS.
1. Не понял, какую роль здесь играет массив.
2. Все константы расставлены "от фонаря"
Изображения
 
1
9 / 7 / 2
Регистрация: 23.06.2014
Сообщений: 54
12.01.2020, 22:13  [ТС]
Это часть одной проги, которой пытаюсь решить часть проблем по работе. Там на вход подается текстовый или бинарный файл, который надо предварительно привести к табличному виду. Фокус в том, что надо посмотреть, как ведут себя данные из столбцов относительно друг друга. Вот и будет такой треугольник. К примеру, если 1 и 2, 3 и 4 столбцы выстраиваются в линию, то это какие-то профили. Если же везде облака, то это какие-то независимые замеры. Пытался обойтись одним боксом - получилась каша. Теперь пробую с массивом.
Практически всё уже написал, вот этот момент был последним. И на нем застрял.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.01.2020, 22:13
Помогаю со студенческими работами здесь

Обратиться к программно созданному Edit-у
Доброго времени суток. Подскажите, как обратиться к программно созданному едиту и веббраузеру на таком же TTabSheet

Обращение к объекту, созданному программно
Столкнулся с проблемой – создаю объект (Panel) при нажатии мышки. Мне необходимо его переместить, вот только не знаю как. Подскажите,...

Обращение к программно созданному Listbox
Здравствуйте! Могу ли я как-то обращаться к программно созданному Listbox? То есть у меня есть код, прописанный в событии Window_Loaded ...

Применить стиль к программно созданному View
Имеется файл со стилем, его содержимое: <style name="myStyle"> <item...

Получить доступ к свойствам checkBox созданному программно
Здравствуйте! Подскажите пожалуйста, как можно получить доступ к свойствам checkBox-a созданному программно. Подробности: В цикле...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru