Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Proidoha
461 / 298 / 26
Регистрация: 04.11.2013
Сообщений: 1,275
#1

Оптимизация передачи классов и методов и их обработки в разных модулях

11.11.2014, 14:35. Просмотров 383. Ответов 1

Доброго времени суток.

Работаю над сложной программой, позволяющей считать таблицу Excel вида "номер-коордХ-коордY-вид точки" и отстроить все это в CorelDraw.

Нужна помощь с оптимизацией построения именно видов точек (круг, квадрат и т.п, последний параметр в таблице). Видов может быть от 1 до 5 , каждый вид имеет 4 параметра: форма, размер, толщина линии, цвет заливки.
Параметры задаются при начальной настройке программы юзером вот в такой форме:

Вложение 453002

Соответственно, имеем 5 параметров:
k (integer) - количество видов (от 1 до 5)
F (string) - форма точки
R (double) - размер
O (double) - толщина линии
Fi (string) - цвет заливки

Создается переменная point класса Object

Дальше следуют преобразования:
В зависимости от значения F мы выбираем ?метод? построения. Методы выглядят так:
(Команды из VBA CorelDraw, разбираться в них не надо, просто примите как данность что методы именно такие)

vb.net
1
2
3
4
5
6
7
  
If F = "Кружок" Then
   point = LayerPoints.СreateElipse(R / 2, R / 2, -R / 2, -R / 2)
ElseIf F = "Квадрат" Then
   point = LayerPoints.CreatePolygon2(0, 0, R, 4)
 
'' И так далее. Для каждой формы точки - свой метод. point - переменная класса Object
Размер (R) и толщина линии (O) передаются без изменений, причем размер указывается в ?методах? построения (см выше), а толщина линии устанавливается отдельной командой:

vb.net
1
point.Outline = O
Fi лучше всего преобразовать в RGB

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
    Private Function ColorShape(ByVal Fi As String)
 
 
        Dim RGB_R As Integer
        Dim RGB_G As Integer
        Dim RGB_B As Integer
 
        If Fi = "Без заливки" Then
            RGB_R = 111
            RGB_G = 111
            RGB_B = 111
 
 
        ElseIf Fi = "Черный" Then
            RGB_R = 0
            RGB_G = 0
            RGB_B = 0
 
'' и т.д.
 
     End If
 
        Return RGB(RGB_R, RGB_G, RGB_B)
    End Function
Метод заливки тоже свой:
vb.net
1
point.Fill.UniformColor.RGBAssign(colorShape)
Это основные параметры. Что я хочу:
В нужном месте программы (в другом модуле) я Говорю "построить точку вида 1" - и программа выдает сразу весь комплект методов с заданными параметрами, например
vb.net
1
2
3
4
5
6
7
point = LayerPoints.СreateElipse(1,25, 1,25, -1,25, -1,25) '' ставим кружок диаметром 2.5 в току с координатами 0;0
point.Outline = 0,1 ''устанавливаем толщину линии 0.1 мм
point.Fill.UniformColor.RGBAssign(0,0,0) '' делаем черную заливку
 
'' после этого мне остается только поставить точку по координатам:
 
point.SetPosition(x, y)
Соответственно, если я скажу "поставить точку вида 2" то набор параметров другой, причем в первой строке - еще и метод другой

Собственно, я вообще не представляю, как все это организовать. Нужна Методика вида :
- Создаешь публичный класс,
- в нем создаешь переменные,
- переносишь данные таким образом (пример),
- создаешь приватный метод,
- в программе вызываешь следующим образом (пример).

Особо уделите, пожалуйста, внимание операторам public, private и т.п. - я в них плаваю.

Сейчас у меня в рабочем теле программы нереальное количество if, причем вызываются они с каждой новой точкой, а хотелось бы оптимизировано - один раз прогнал по If-ам до начала работы основного тела программы - и получил коллекцию методов, к которой только правильно обратиться.

Добавлено через 2 часа 0 минут
Сложно описал.
Короче, нужно создать и эффективно пользоваться публичным массивом из 5 элементов, в каждом элементе 4 параметра:
1 параметр - метод
2 и 3 - число
4 - RGB

При вызове элемента массива должна создаваться глобальная переменная point as object, к которой применяется метод из параметра 1 (с использованием параметра 2 внутри метода), затем применяются еще 2 сторонних метода с параметрами 3 и 4, и еще один метод с двумя внешними переменными Х и Y.

Надеюсь, так понятнее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2014, 14:35
Ответы с готовыми решениями:

Оптимизация хранения и передачи информации в модульном приложении
Доброго времени! У меня есть несколько написанных программ в виде отдельных...

Вызов всех повторяющихся методов из разных классов
Как сделать так что бы при добавлении нового класса не приходилость менять код...

Вызов методов с одинаковыми именами для разных классов
В функцию func можно передать один из двух классов A или B. У них есть функции...

Возможно ли использовать один массив в разных модулях?
Возможно ли использовать один массив в разных модулях? Количество элементов...

Как использовать одну переменную в разных модулях
Дорогие форумяне! Есть макросы, имена которых добавлены в событие листа, но с...

1
Proidoha
461 / 298 / 26
Регистрация: 04.11.2013
Сообщений: 1,275
18.11.2014, 16:51  [ТС] #2
Вобщем, хрен с ним с методом. Пропишу отдельно используя If.
Пытаюсь передать массив в отдельный модуль чтобы вызывать его (массив) из любого другого модуля в любое время. Нихрена не выходит - массив пустой.

На форме делаю так :
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
50
51
52
53
54
55
56
57
  Public Class points_options
 
    Public F(5) As Integer ' Числовое значение формы. 0 - кружок
    Public R(5) As Double ' Радиус мм
    Public O(5) As Double ' толщина линии мм
    Public Fi(5) As String ' заливка цвет
    Public fill(5) As Integer ' заливка в формате RGB
    Public k As Integer 'количество строк в массиве
 
    Private Function ColorShape(ByVal Fi As String) ' Функция к делу не относится - возвращает РГБ значение
 
        Dim RGB_R As Integer
        Dim RGB_G As Integer
        Dim RGB_B As Integer
 
        If Fi = "Без заливки" Then
            RGB_R = 111
            RGB_G = 111
            RGB_B = 111
 
        ElseIf Fi = "Черный" Then
            RGB_R = 0
            RGB_G = 0
            RGB_B = 0
' И т. д.
 
       Return RGB(RGB_R, RGB_G, RGB_B)
    End Function
 
  Private Sub Button_ok_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_ok.Click
 
        Me.F(1) = Forma1.Text
        me.R(1) = Val(Razmer1.Text)
        Me.O(1) = Outline1.Text
        Me.fill(1) = ColorShape(Fill1.Text)
        k = 1
 
        If CheckBox2.CheckState = CheckState.Checked Then
            k = 2
            Me.F(2) = Forma2.Text
            Me.R(2) = Val(Razmer2.Text)
            Me.O(2) = Outline2.Text
            Me.fill(2) = ColorShape(Fill2.Text)
        End If
 
        If CheckBox3.CheckState = CheckState.Checked Then
            k = 3
            Me.F(3) = Forma3.Text
            Me.R(3) = Val(Razmer3.Text)
            Me.O(3) = Outline3.Text
            Me.fill(3) = ColorShape(Fill3.Text)
        End If
 
      ' Аналогично еще 2 чекбокса
 
       P_options_data.main(k) 'сюда пытаюсь передать массив
       Me.Close()
Модуль P_options_data выглядит так:

vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Module P_options_data
    Public F(5) As String
    Public R(5) As Double
    Public O(5) As String
    Public Fi(5) As String
    Public k As Integer
 
    Public Sub main(ByVal k)
 
        For i = 1 To k
            F(i) = points_options.F(i)
            R(i) = points_options.R(i)
            O(i) = points_options.O(i)
            Fi(i) = points_options.Fi(i)
        Next i
    End Sub
End Module
Если я в другом модуле в последствии сделаю так, то значения будут пустые.

vb.net
1
2
3
4
5
6
 For u = 1 To k
       F(u) = P_options_data.F(u)
       R(u) = P_options_data.R(u)
       O(u) = P_options_data.O(u)
       Fi(u) = P_options_data.Fi(u)
 Next u
Как сделать, чтобы данные в модуле P_options_data хранились все время работы программы?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2014, 16:51

Заливка экрана и рисование окружности в разных модулях
Помогите написать задачу.Основная программа и 2 модуля 1 модуль заливает экран...

Как использовать одни переменные в разных модулях
Как связать одну переменную с несколькими модулями..т.е чтобы её можно было...

Использовать единожды созданные подключения к MySQL в разных модулях
Есть express, установлен модуль mysql, цель: соединиться с базой где-то в...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru