Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 64
1

Присвоить имя динамически создаваемой кнопке

16.04.2015, 17:50. Показов 1536. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
Public Class Form1
    Dim DN As Integer 'konkretni den
    Dim DNS As Integer 'kolichestvo dnei
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        DN = 0
        DNS = 0
    End Sub
    Private Sub BDAdd_Click(sender As System.Object, e As System.EventArgs) Handles BDAdd.Click
        DNS = DNS + 1
        DN = DNS
        BDAdd.Left = BDAdd.Left + 36
        Dim BD As Button
        BD = New Button
        With BD
            .Left = 94 + 36 * (DNS)
            .Top = 30
            .Text = DNS
            .ForeColor = Color.Blue
            .Height = 30
            .Width = 30
            .BackgroundImage = tcv10.My.Resources.Resources.b
            .BackgroundImageLayout = ImageLayout.Stretch
            Me.Controls.Add(BD)
            .Visible = True
        End With
    End Sub
End Class
est BDAdd knopka, pri najatii kotoroi sozdaiotsia novaia knopka. nujno chto pri sozdanii novoi knopki emu presvoivalas imia BD(DNS). a na najatia na novoi knopke DN bralo znachenia cifr iz imeni knopki ().

P.S. podskajite pojaluista sait gde ia smogbi na latinice na ruskom pechatat.
P.P.S. za ranee sposibo
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.04.2015, 17:50
Ответы с готовыми решениями:

Присвоить имя элементу, созданному динамически на другой форме
Проблема в том, что я, по нажатию кнопки на форме 1, динамически создаю элементы на форме 2, при...

Как динамически присвоить стиль кнопке, если стиль описан в файле xaml?
Здравствуйте, столкнулся с проблемой: нужно в коде присвоить стиль кнопке. Этот стиль находится в...

Индексы в динамически создаваемой форме
Здравствуйте. Есть партиал для вложенной модели _image_form.slim = f.fields_for :images,...

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

16
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
16.04.2015, 18:32 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

vuhu, для хранения информации связанной с элементом управления лучше использовать свойство Tag, а не Name.
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
Public Class Form1 
    
    Dim DN As Integer = 0 ' konkretni den
    Dim DNS As Integer = 0 ' kolichestvo dnei
    
    Private Sub BDAdd_Click(sender As System.Object, e As System.EventArgs) Handles BDAdd.Click
        DNS = DNS + 1
        DN = DNS
        
        Dim BD As New Button
        With BD
            .Left = 94 + 36 * DNS
            .Top = 30
            .Height = 30
            .Width = 30
            .ForeColor = Color.Blue
            .BackgroundImage = tcv10.My.Resources.Resources.b
            .BackgroundImageLayout = ImageLayout.Stretch
            .Text = DNS
            .Name = "BD" + DNS
            .Tag = DNS
        End With
        AddHandler BD.Click, AddressOf BD_Click
        
        Me.SuspendLayout()
        BDAdd.Left = BDAdd.Left + 36
        Me.Controls.Add(BD)
        Me.ResumeLayout()
    End Sub
    
    Private Sub BD_Click(sender As System.Object, e As System.EventArgs)
        Dim BD As Button = CType(sender, Button)
        DN = CType(BD.Tag, Integer)
    End Sub
End Class
1
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 64
16.04.2015, 18:39  [ТС] 3
sposibo OwenGlendower
0
OwenGlendower
16.04.2015, 18:43
  #4

Не по теме:

vuhu, слово спасибо пишется через "а".

0
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 64
16.04.2015, 19:16  [ТС] 5
k sojaleniu ne rabotaet:
.Name = "BD" + DNS -> Conversion from string "BD" to type 'Double' is not valid.

Добавлено через 28 минут
chto s etoi oshibkoi delat?
0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
16.04.2015, 19:22 6
vuhu, У Вас какие-то проблемы с набором кириллического текста?
0
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 64
16.04.2015, 19:30  [ТС] 7
ok, ponial .Name = "BD" & DNS

OwenGlendower, bolshoe спAсибо tebe

Добавлено через 1 минуту
Памирыч, u menia ruskoi klaviaturi vobshe net. podskajite pojaluista sait gde ia smogbi na latinice na ruskom pechatat.
0
edward_freedom
16.04.2015, 19:42
  #8

Не по теме:

vuhu, не поверишь, гугл знает все! клик

0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
16.04.2015, 19:53 9
Цитата Сообщение от vuhu Посмотреть сообщение
u menia ruskoi klaviaturi vobshe net.
В таком случае разрешается писать транслитом.
0
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 64
16.04.2015, 23:51  [ТС] 10
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
Public Class Form1
    Dim DN As Integer 'konkretuli dRe
    Dim DNS As Integer 'dReebis raodenoba
    Dim BD() As Button 'axali dRis knopkis sheqmna
    Dim l1 As Label 'es droebitia dns rom davinaxo
    Dim l2 As Label 'esec droebitia dacherili knopkis saxeli rom davinaxo
    'Dim BDAdd As Button 'dRis damateba
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        DN = 0
        DNS = 0
        BDAdd = New Button
        With BDAdd
            .Left = 130
            .Top = 30
            .ForeColor = Color.Blue
            .Height = 30
            .Width = 30
            '.BackgroundImage = tcv10.My.Resources.Resources.b
            '.BackgroundImageLayout = ImageLayout.Stretch
            .Text = "+"
            AddHandler BDAdd.Click, AddressOf BDAdd_Click
            Me.Controls.Add(BDAdd)
            .Visible = True
        End With
        l1 = New Label
        l1.Text = DNS
        l1.Top = 100
        l1.Left = 100
        l1.Visible = True
        Me.Controls.Add(l1)
        l2 = New Label
        l2.Text = 0
        l2.Top = 130
        l2.Left = 100
        l2.Visible = True
        Me.Controls.Add(l2)
    End Sub
    Private Sub BDAdd_Click(sender As System.Object, e As System.EventArgs)
        DNS = DNS + 1
        DN = DNS
        BDAdd.Left = BDAdd.Left + 36
        ReDim Preserve BD(DNS)
        BD(DNS) = New Button
        With BD(DNS)
            .Left = 94 + 36 * (DNS)
            .Top = 30
            .ForeColor = Color.Blue
            .Height = 30
            .Width = 30
            '.BackgroundImage = tcv10.My.Resources.Resources.b
            '.BackgroundImageLayout = ImageLayout.Stretch
            .Text = DNS
            .Name = "BD" & DNS
            .Tag = DNS
            Me.Controls.Add(BD(DNS))
            .Visible = True
        End With
        AddHandler BD(DNS).Click, AddressOf BDDNS_click
        Me.SuspendLayout()
        Me.Controls.Add(BD(DNS))
        Me.ResumeLayout()
        l1.Text = DNS
    End Sub
   
    Private Sub BDDNS_click(sender As Object, e As EventArgs)
        DN = CType(BD(DN).Tag, Integer)
        l1.Text = DN
        Dim i As Integer
        For i = 1 To DNS
            BD(i).ForeColor = Color.Blue
        Next
        l1.Text = DN
        BD(DN).ForeColor = Color.Green
        l2.Text = BD(DN).Name
    End Sub
End Class
у меня ошибка. я создал 2 лабела чтоб отслеживать DNS и имя кнопки. но какую кнобку-бы не нажимал обращается к последней

Добавлено через 3 минуты
Памирыч, кстати, транслит нашёл. саит: translit.net

Добавлено через 1 минуту
да, вопрос: как исправить ошибку?
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
16.04.2015, 23:57 11
Лучший ответ Сообщение было отмечено vuhu как решение

Решение

vuhu, замени строку №66 на
VB.NET
1
DN = CType(CType(sender, Button).Tag, Integer)
1
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 64
17.04.2015, 00:29  [ТС] 12
сработала огромное спасибо тебе OwenGlendower, буду отписиватся по мере продвижения

Добавлено через 7 минут
вот и второй вопрос созрел я добавляю неограниченное количество кнопок, в кокой-то момент мне не будет хватать ширины экрана. а экран у разных машин разные... как получить значение ширины экрана?

Добавлено через 5 минут
а, всё, догадался, возьму ширину формы вопрос уже не актуален
0
39 / 40 / 20
Регистрация: 30.09.2013
Сообщений: 141
17.04.2015, 00:37 13
Цитата Сообщение от vuhu Посмотреть сообщение
как получить значение ширины экрана?
VB.NET
1
2
Screen.PrimaryScreen.WorkingArea.Height
Screen.PrimaryScreen.WorkingArea.Width
Цитата Сообщение от vuhu Посмотреть сообщение
а, всё, догадался, возьму ширину формы вопрос уже не актуален
Ну вдруг всё же пригодится...
1
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
17.04.2015, 01:14 14
Цитата Сообщение от FlegmaSpirit Посмотреть сообщение
Screen.PrimaryScreen.WorkingArea.Height
Screen.PrimaryScreen.WorkingArea.Width
Небольшая поправка - т.к. мониторов может быть несколько и форма совсем не обязательно будет на главном, то лучше получить экземпляр Screen с помощью Screen.FromControl и обращаться к его свойству WorkingArea.
1
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 64
18.04.2015, 00:26  [ТС] 15
поздравьте товарищи кнопки готовы если есть идеи по оптимизации приму с удовольствием
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
150
151
152
Public Class Form1
    Dim DN As Integer 'konkretuli dRe
    Dim DNS As Integer 'dReebis raodenoba
    Dim BD() As Button 'axali dRis knopkis sheqmna
    Dim BDLeft As Button
    Dim BDRight As Button
    Dim BLeft As Integer
    'Dim BDAdd As Button 'dRis damateba
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        DN = 0
        DNS = 0
        BLeft = Math.Round((Me.Width - 400 - 94) / 36)
        BDAdd = New Button
        With BDAdd
            .Left = 130
            .Top = 30
            .ForeColor = Color.Blue
            .Height = 30
            .Width = 30
            '.BackgroundImage = tcv10.My.Resources.Resources.b
            '.BackgroundImageLayout = ImageLayout.Stretch
            .Text = "+"
            AddHandler BDAdd.Click, AddressOf BDAdd_Click
            Me.Controls.Add(BDAdd)
            .Visible = True
        End With
        BDLeft = New Button
        With BDLeft
            .Left = 94
            .Top = 30
            .ForeColor = Color.Blue
            .Height = 30
            .Width = 30
            '.BackgroundImage = tcv10.My.Resources.Resources.b
            '.BackgroundImageLayout = ImageLayout.Stretch
            .Text = "<"
            AddHandler BDLeft.Click, AddressOf BDLeft_Click
            Me.Controls.Add(BDLeft)
            .Visible = False
        End With
        BDRight = New Button
        With BDRight
            .Left = Me.Width - 364
            .Top = 30
            .ForeColor = Color.Blue
            .Height = 30
            .Width = 30
            '.BackgroundImage = tcv10.My.Resources.Resources.b
            '.BackgroundImageLayout = ImageLayout.Stretch
            .Text = ">"
            AddHandler BDRight.Click, AddressOf BDRight_Click
            Me.Controls.Add(BDRight)
            .Visible = False
        End With
    End Sub
    Private Sub BDAdd_Click(sender As System.Object, e As System.EventArgs)
        DNS = DNS + 1
        DN = DNS
        If DNS >= BLeft Then
            BDAdd.Left = BLeft * 36 + 94
        Else
            BDAdd.Left = BDAdd.Left + 36
        End If
        ReDim Preserve BD(DNS)
        BD(DNS) = New Button
        With BD(DNS)
            .Left = 94 + 36 * (DNS)
            .Top = 30
            .ForeColor = Color.Green
            .Height = 30
            .Width = 30
            '.BackgroundImage = tcv10.My.Resources.Resources.b
            '.BackgroundImageLayout = ImageLayout.Stretch
            .Text = DNS
            .Name = "BD" & DNS
            .Tag = DNS
            Me.Controls.Add(BD(DNS))
            .Visible = True
        End With
        AddHandler BD(DNS).Click, AddressOf BDDNS_click
        If DNS >= BLeft Then
            BD(DNS).Left = 94 + 36 * (BLeft)
 
            Dim i1 As Integer
            For i1 = 1 To DNS
                BD(i1).Left = (DNS - (DNS - BLeft) - (DNS - i1)) * 36 + 58
                If BD(i1).Left < 94 Then BD(i1).Visible = False Else BD(i1).Visible = True
            Next
            BDLeft.Visible = True
        Else
            BDLeft.Visible = False
        End If
 
        Dim i As Integer
        For i = 1 To DNS - 1
            BD(i).ForeColor = Color.Blue
        Next
        Me.SuspendLayout()
        Me.Controls.Add(BD(DNS))
        Me.ResumeLayout()
    End Sub
    Private Sub BDDNS_click(sender As Object, e As EventArgs)
        DN = CType(CType(sender, Button).Tag, Integer)
        Dim i As Integer
        For i = 1 To DNS
            BD(i).ForeColor = Color.Blue
        Next
        BD(DN).ForeColor = Color.Green
    End Sub
    Private Sub BDLeft_Click(sender As System.Object, e As System.EventArgs)
        Dim i As Integer
        For i = 1 To DNS
            BD(i).Left = BD(i).Left + 36
            If BD(i).Left >= Me.Width - 400 Or BD(i).Left <= 94 Then
                BD(i).Visible = False
            Else
                BD(i).Visible = True
            End If
            If BD(1).Left = 130 Then
                BDLeft.Visible = False
            Else
                BDLeft.Visible = True
            End If
            If BD(DNS).Left >= Me.Width - 400 Then
                BDRight.Visible = True
            Else
                BDRight.Visible = False
            End If
        Next
    End Sub
    Private Sub BDRight_Click(sender As System.Object, e As System.EventArgs)
        Dim i As Integer
        For i = 1 To DNS
            BD(i).Left = BD(i).Left - 36
            If BD(i).Left >= Me.Width - 400 Or BD(i).Left <= 94 Then
                BD(i).Visible = False
            Else
                BD(i).Visible = True
            End If
            If BD(DNS).Left >= Me.Width - 400 Then
                BDRight.Visible = True
            Else
                BDRight.Visible = False
            End If
            If BD(1).Left = 130 Then
                BDLeft.Visible = False
            Else
                BDLeft.Visible = True
            End If
        Next
    End Sub
End Class
Добавлено через 8 часов 9 минут
Назрел второй вопрос
Созданы кнопки соответствующие дням, между ними можно переключатся, теперь на выбранный день нужно прикрепить событие. нап: экскурсия, гостиница, услуги гида и т.д. У каждого события свои параметры: цена, название, и.т.д. На выбранный день даются выбор события и после заполняешь форму события и нажимаешь на кнопку адд.
Соответственно нужно объявить параметры с тремя значениями Х(А)(В)(С) где А - день В - номер события, С - номер параметра.
Как это сделать?

Добавлено через 22 минуты
да, объявил переменные EN и ENS которым будет прeсвоеватся значение номер событии и всего событии.
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334
18.04.2015, 01:24 16
Цитата Сообщение от vuhu Посмотреть сообщение
Соответственно нужно объявить параметры с тремя значениями Х(А)(В)(С)
Не совсем понял что именно нужно... а массив для этого дела не что не подойдет?
VB.NET
1
Dim Массив(x,2) as Integer
0
2 / 2 / 0
Регистрация: 13.11.2010
Сообщений: 64
19.04.2015, 00:39  [ТС] 17
VB.NET
1
2
3
4
5
Public DN As Integer 'vibranni den
    Public DNS As Integer 'kolichestvo dnei
    Public EN As Integer 'nomer sobitia
    Public ENS As Integer 'summa sobitii
    Public a()()() As String
а это уже usercontrol

VB.NET
1
2
3
4
5
 Private Sub PCAdd_Click(sender As System.Object, e As System.EventArgs) Handles PCAdd.Click
        Form1.ENS = Form1.ENS + 1
        Form1.EN = Form1.EN + 1
        Form1.a(DNS)(EN)(1) = CB1.Text
    End Sub
DNS is not declared
EN is not declared


что с ним делать?

Добавлено через 2 минуты
Цитата Сообщение от Fakels Посмотреть сообщение
Не совсем понял что именно нужно... а массив для этого дела не что не подойдет?
я массив объявил в этом формате: а()()()

Добавлено через 22 часа 58 минут
нашёл ошибку: Form1.a(DNS)(EN)(1) = CB1.Text -> Form1.a(Form1.DNS)(Form1.EN)(1) = CB1.Text как банально
0
19.04.2015, 00:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2015, 00:39
Помогаю со студенческими работами здесь

Как задать цвет в Background динамически создаваемой кнопки
Как задать цвет в Background динамически создаваемой кнопки? И как задать изображение для...

Каждой динамически созданной кнопке свой динамически созданный PictureBox
Добрый день. Надеюсь, что пишу в тот раздел. Находил немного похожие темы: каждая созданная кнопка...

Имя создаваемой таблицы БД из нескольких слов
Добрый день. Прописал такой кусок кода на клик по кнопке: procedure TForm10.sButton2Click(Sender:...

Сохранение результирующего файла в создаваемой папке, имя которой содержит текущие дату и время
Есть не большой скрип, который сортирует базы (mail:pass) по доменам. Скрпит выглядит примерно...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru