Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Oleg

Массивы элементов. Как увеличить скорость создания?

02.12.2009, 06:54. Показов 1193. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В VB6 я создавал массив элементов (кнопок) следующим образом: помещал на форму кнопку и указывал, что она будет входить в массив кнопок. Далее в программе создавал столько кнопок, сколько мне было надо методом Load. Все работало очень быстро (на глаз не заметно).

В VB NET я не смог сказать кномке, что она входит в массив.
Пришлось создать класс массива кнопок. Далее используя класс создавать кнопки. Работает это очень медленно, для создания 500 кнопок требуется 15-20 секунд.

Может можно все-таки сделать по старому способу? Или может можно ускорить процесс создания? Пример создания массива взят из MSDN, поиск по слову ButtonArray.

Если кто знает как делать, подскажите.

З.Ы. Только не надо задавать глупух вопросов, таких как - зачем тебе столько кнопок?, где ты их будешь размещать? и т.п. вопросы

Заранее благодарен.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.12.2009, 06:54
Ответы с готовыми решениями:

Увеличить скорость перебора элементов массива
Всем привет! Пишу тут первый раз, так что, не ругайте за возможные косяки. Дело вот в чем: Имеется двумерный массив данных из БД...

Как увеличить скорость Wi-Fi?
Добрый день, прошу совета. Провайдер - мгтс, тариф разгони вай-фай, 150 мбит/с, новый роутер (без внешних антенн), который вещает на...

Как увеличить скорость Wi-Fi?
Как увеличить скорость Wi-Fi? Имеется интернет 70мбит\сек. Имеется собственно сам Wi-Fi роутер Neatgear WNR2200. Подключен Моноблок...

2
0 / 0 / 0
Регистрация: 22.11.2008
Сообщений: 18
29.12.2009, 15:30
Ну, для начала, как ты всё делаешь? Код приведи плз.
0
Oleg
30.12.2009, 05:37
Вот код:
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
Module Sapper
 
    Public aBtn As ButtonArray ' Массив кнопок
    Public aLbl As LabelArray  ' Массив меток
    Public Timer As Long = 0
    Public TimerEnabled As Boolean = False
    Public aField() As Long    ' Поле
    Public XX As Long = 9
    Public YY As Long = 9
    Public KolBomb As Long = 10
    Public ImgFlag As Image
    Public lbKolBomb As Label
 
    Public Sub TestField(ByVal Ind As Long)
        Dim i As Long
        If aField(Ind) = -1 Then
            For i = 1 To XX * YY
                aBtn(i).Visible = False
            Next
        End If
    End Sub
End Module
 
Public Class ButtonArray
    Inherits System.Collections.CollectionBase
    Private ReadOnly HostForm As System.Windows.Forms.Form
 
    Public Function AddNewButton() As System.Windows.Forms.Button
        ' Create a new instance of the Button class.
        Dim aButton As New System.Windows.Forms.Button
        ' Add the button to the collection's internal list.
        Me.List.Add(aButton)
        ' Add the button to the controls collection of the form 
        ' referenced by the HostForm field.
        HostForm.Controls.Add(aButton)
        ' Set intial properties for the button object.
        aButton.Top = 0
        aButton.Left = 0
        aButton.Tag = Me.Count
        aButton.Text = 'Button ' & Me.Count.ToString
        aButton.Visible = False
        aButton.TabIndex = 0
        AddHandler aButton.Click, AddressOf ClickHandler
        AddHandler aButton.MouseDown, AddressOf ClickMouse
        Return aButton
    End Function
 
    Public Sub New(ByVal host As System.Windows.Forms.Form)
        HostForm = host
        Me.AddNewButton()
    End Sub
 
    Default Public ReadOnly Property Item(ByVal Index As Integer) As System.Windows.Forms.Button
        Get
            Return CType(Me.List.Item(Index), System.Windows.Forms.Button)
        End Get
    End Property
 
    Public Sub Remove()
        ' Check to be sure there is a button to remove.
        If Me.Count > 0 Then
            ' Remove the last button added to the array from the host form 
            ' controls collection. Note the use of the default property in 
            ' accessing the array.
            HostForm.Controls.Remove(Me(Me.Count - 1))
            Me.List.RemoveAt(Me.Count - 1)
        End If
    End Sub
 
    Public Sub ClickHandler(ByVal sender As Object, ByVal e As System.EventArgs)
        'MessageBox.Show('you have clicked button ' & CType(CType(sender, System.Windows.Forms.Button).Tag, String))
        aBtn(CType(sender, System.Windows.Forms.Button).Tag - 1).Visible = False
        TestField(CType(sender, System.Windows.Forms.Button).Tag - 1)
    End Sub
 
    Public Sub ClickMouse(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If e.Button = MouseButtons.Right Then
            aBtn(CType(sender, System.Windows.Forms.Button).Tag - 1).Image = ImgFlag
            lbKolBomb.Text = CLng(lbKolBomb.Text) - 1
        End If
        TimerEnabled = True
    End Sub
End Class
 
    Public Sub Create_Field(ByVal X As Long, ByVal Y As Long, ByVal Bomb As Long)
        Dim i As Long, j As Long, indBomb As Long, NKol As Long
        Dim k As Long = 1
        XX = X
        YY = Y
        KolBomb = Bomb
        ReDim aField(X * Y)
        For i = 0 To X * Y
            aField(i) = 0
        Next
        For i = 0 To Y - 1
            For j = 0 To X - 1
                aBtn.AddNewB    nd Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        aBtn = New ButtonArray(Me)
        aLbl = New LabelArray(Me)
        Me.Face.Focus()
        ImgFlag = ImageList1.Images(0)
        lbKolBomb = Label1
    End Sub
 
    Private Sub MenuItem5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem5.Click
        Remove_Field()
        Create_Field(9, 9, 10)
        Timer = 0
        TimerEnabled = False
    End Sub
 
    Private Sub Face_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Face.Click
 
    End Sub
 
    Private Sub Face_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Face.MouseDown
        MsgBox(e.Button = MouseButtons.Left)
    End Sub
 
    Private Sub MenuItem6_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MenuItem6.Click
        Remove_Field()
        Create_Field(17, 16, 40)
        Timer = 0
        TimerEnabled = False
    End Sub
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If TimerEnabled And (Timer < 999) Then
            Timer += 1
            Me.Label2.Text = Mid(Trim((Timer + 1000).ToString), 2)
        End If
    End Sub
 
    Private Sub MenuItem7_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MenuItem7.Click
        Remove_Field()
        Create_Field(30, 16, 99)
        Timer = 0
        TimerEnabled = False
    End Sub
 
    Private Sub MenuItem4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MenuItem4.Click
        Remove_Field()
        Create_Field(XX, YY, KolBomb)
        Timer = 0
        TimerEnabled = False
    End Sub
End Class
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.12.2009, 05:37
Помогаю со студенческими работами здесь

Как увеличить скорость генерации в C++
Вот кодик #include &lt;stdio.h&gt; #include &lt;memory.h&gt; int main() { FILE *fp = fopen(&quot;e:\\exe\\exes.txt&quot;, &quot;w&quot;); const int...

Как увеличить скорость по Wi-Fi в Elementary OS?
Добрый день! На нетбуке стоят Elementary OS и Linux Mint 15. Wi-Fi раздается с роутера Asus RT- N56U. Спид-тестом измерял скорость и...

Как увеличить скорость передачи?
Тут недавно создавал тему, мне порекомендовали использовать WCF, а точнее порекомендовал этот хороший человек тык. Там он показал...

Увеличить скорость LTE, как?
Устройство: Huawei E3372h (не уверен) М150-2 Оператор: мегафон На работе повесили лампы, которые висят на стальных(не уверен) крепежах....

Как увеличить скорость маятника?
подскажите пожалуйста


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru