Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Label


Автор: Гость_Гость 13.5.2005, 21:59
Есть форма, на ней Label1 и кнопка Command1
При запуске программы переменной <А> присваивается случайное число от 1 до 3
При нажатии на кнопку Command1 если А=1 кнопка исчезает и Label1="Выпала 1"
если А=2 кнопка исчезает и Label1="Выпала 2"
если А=2 кнопка исчезает и Label1="Выпала 3"



Private Sub Form_Load()
Randomize
A = Int((3 * Rnd) + 1)
End Sub

Private Sub Command1_Click()
Command1.Visible = False
If A = 1 Then Label1 = "Выпала 1"
If A = 2 Then Label1 = "Выпала 2"
If A = 3 Then Label1 = "Выпала 3"
End Sub

Но при нажатии на Command1, Label1 остается пустой...
в чем проблема?

Автор: Naghual 13.5.2005, 22:07
А переменная А у тебя не объявленна.
Объяви ее в разделе Declaration кода формы: Dim A As Integer

Автор: Guest 14.5.2005, 02:26
Declaration
Dim A As Integer

Private Sub Form_Load()
Randomize
A = Int((3 * Rnd) + 1)
End Sub

Private Sub Command1_Click()
Command1.Visible = False
If A = 1 Then Label1 = "Выпала 1"
If A = 2 Then Label1 = "Выпала 2"
If A = 3 Then Label1 = "Выпала 3"
End Sub

НЕ РАБОТАЕТ

Автор: Вадян! 14.5.2005, 04:42
Попробуй так
Код

Declaration
 Option explicit    
 Dim a as integer

smile

Автор: Guest 14.5.2005, 06:00
Declaration
Option Explicit
Dim a As Integer

Private Sub Form_Load()
Randomize
a = Int((3 * Rnd) + 1)
End Sub

Private Sub Command1_Click()
Command1.Visible = False
If a = 1 Then Label1 = "Выпала 1"
If a = 2 Then Label1 = "Выпала 2"
If a = 3 Then Label1 = "Выпала 3"
End Sub


выдает ошибку !!! Declaration

Автор: Вадян! 14.5.2005, 06:46
Код

Option Explicit
Dim A As Integer
______________________________

Private Sub Command1_Click()
Command1.Visible = False
Dim A As Integer
A = Val(Text1.Text)
If A = 1 Then Label1 = "Выпала 1"
If A = 2 Then Label1 = "Выпала 2"
If A = 3 Then Label1 = "Выпала 3"
End Sub
__________________________________

Private Sub Form_Load()
Randomize [A] = Int((3 * Rnd) + 1)
End Sub



Я тут написал пример, но тебе надо кинуть на форму ещё Техт1
и при вводе в него цифру от одного до трёх получается то что хотел
а по другому я пока и сам не знаю как???
Да относительно
Цитата

выдает ошибку !!! Declaration

Тебе не надо писать это слово, тебе надо зайти в
(General) (Declaration) и там прописать
Option Explicit
Dim A As Integer
smile






Автор: Гость_Run-time Error 14.5.2005, 19:37
Уважаемый Гость. Перед тем, как заниматься программированием, советую хоть чуть-чуть почитать книги! А то в последнее время столько ...тупых... вопросов от гостей стало поступать... прямо жуть smile

Автор: Гость_Legion 15.5.2005, 05:53
а для чего еще форум?

Автор: Voldemar2004 15.5.2005, 11:35
Цитата

а для чего еще форум?


Если тебе дали на работе задачу, ты ее решаешь и что-то не получается - тогда на форум, а вопросы, "как мне поместить Label на форму" - для этого есть учебники/справочники.

Автор: Вадян! 15.5.2005, 12:12
Voldemar2004
Цитата
"как мне поместить Label на форму"

Да ладно не злись он вроде не о том, лучше если знаеш подскажи как без Техт1 обойтись smile
Цитата

Я тут написал пример, но тебе надо кинуть на форму ещё Техт1
и при вводе в него цифру от одного до трёх получается то что хотел
а по другому я пока и сам не знаю как???
smile

Автор: Voldemar2004 15.5.2005, 13:32
Цитата

Есть форма, на ней Label1 и кнопка Command1
При запуске программы переменной <А> присваивается случайное число от 1 до 3
При нажатии на кнопку Command1 если А=1 кнопка исчезает и Label1="Выпала 1"
если А=2 кнопка исчезает и Label1="Выпала 2"
если А=2 кнопка исчезает и Label1="Выпала 3"


Вадян!, тебе не кажется, что

Код

Randomize [A] = Int((3 * Rnd) + 1)    


будет всегда выдавать одно и тоже значение равное нулю.

Цитата

лучше если знаеш подскажи как без Техт1 обойтись


Код

Option Explicit
Dim A As Integer

Private Sub Command1_Click()

Select Case A
Case 1
Label1.Caption = "Выпала 1"
Case 2
Label1.Caption = "Выпала 2"
Case 3
Label1.Caption = "Выпала 3"
End Select

If A = 1 Then Command1.Visible = False
End Sub

Private Sub Form_Load()
Randomize [A] = Int((3 * Rnd) + 1)
End Sub


Не очень понял зачем вам TextBox, вы в нем что ли хотели выводить "Выпала 3", "Выпала 2" и т.п.?

Автор: Gannibal 15.5.2005, 14:16
может вот так вот уже или я чегото непонял?
Код

Option Explicit
Dim A As Integer

Private Sub Command1_Click()
Command1.Visible = False
If A = 1 Then Label1.Caption = "1"
If A = 2 Then Label1.Caption = "2"
If A = 3 Then Label1.Caption = "3"
End Sub

Private Sub Form_Load()
Randomize: A = Int((3 * Rnd) + 1)
End Sub


а то я чегото непонял что за строчка у вас такая
Цитата
Randomize [A] = Int((3 * Rnd) + 1)

чёто она помойму неработает smile или я отупeл за всё ето время smile

Автор: Guest 15.5.2005, 17:17

Private Sub BB1_Click()
BB1.Visible = False
If LB1 = "B" Then Label5 = "Найден выход.": level = level + 1: GoTo XXX100:
End Sub


GoTo XXX100: - если поместить за пределами

Private Sub BB1_Click()
....
End Sub

то переход туда не происходит. Почему ?

Автор: Guest 15.5.2005, 17:19
то есть вот так

Private Sub BB1_Click()
BB1.Visible = False
If LB1 = "B" Then Label5 = "Найден выход.": level = level + 1: GoTo XXX100:
End Sub

XXX100:
текст программы.....

Автор: cardinal 15.5.2005, 17:45
Цитата
GoTo can branch only to lines within the procedure where it appears.

и вообще
Цитата
Note  Too many GoTo statements can make code difficult to read and debug. Use structured controlstatements (Do...Loop, For...Next, If...Then...Else, Select Case) whenever possible.

А можешь просто сделать отдельную функцию и выполнять ее по условию...

Модератор: Пожалуйста, один топик - один вопрос.

Автор: Voldemar2004 15.5.2005, 18:03
Цитата

чёто она помойму неработает  или я отупeл за всё ето время

M.E.G.U.S, ты прав, мне тоже кажется ерунда какая-то. И смысла задачи то я не понял. smile
Гость_Гость делает какую-то игру. smile

Автор: Gannibal 15.5.2005, 18:30
вот так вот должно быть
Код

Option Explicit

Private Sub Command1_Click()
Dim level

Command1.Visible = False
If Label1.Caption = "B" Then Label5.Caption = "Íàéäåí âûõîä.": level = level + 1: GoTo XXX100

XXX100:
Print "ura"

End Sub


кстати Гость у тебя там ошибка в этой строчке
Цитата(Guest @ 15.5.2005, 16:19)
If LB1 = "B" Then Label5 = "Найден выход.": level = level + 1: GoTo XXX100:


там в конце недложно быт ":" вот так вот

Добавлено @ 18:31
Цитата(cardinal @ 15.5.2005, 16:45)
А можешь просто сделать отдельную функцию и выполнять ее по условию...


полностью согласен smile

Автор: Voldemar2004 15.5.2005, 19:52
Код

GoTo XXX100


А это зачем?

Автор: cardinal 15.5.2005, 21:09
Цитата(Voldemar2004 @ 15.5.2005, 16:03)
Гость_Гость делает какую-то игру.

Ходилку по лабиринту smile
Добавлено @ 21:09
Цитата(Voldemar2004 @ 15.5.2005, 17:52)
А это зачем?

В смысле?

Автор: Gannibal 15.5.2005, 23:05
Цитата(cardinal @ 15.5.2005, 20:09)
Цитата (Voldemar2004 @ 15.5.2005, 16:03)
Гость_Гость делает какую-то игру.

Ходилку по лабиринту smile


а может стрелялку какую нибудь smile здесь непонять smile ладно оставивим его.. может он нам сам скажет что он делает

Цитата(cardinal @ 15.5.2005, 20:09)
Добавлено @ 20:09
Цитата (Voldemar2004 @ 15.5.2005, 17:52)
А это зачем?

В смысле?


он наверное пошутил как я понял smile

Автор: Guest 16.5.2005, 07:14
Option Explicit
Private Sub Command1_Click()
Dim level
Command1.Visible = False
If Label1.Caption = "B" Then Label5.Caption = "Íàéäåí âûõîä.": level = level + 1: GoTo XXX100

XXX100:
Print "ura"

End Sub

это понятно. но если есть Private Sub Command1_Click() Private Sub Command2_Click() ..... Private Sub Command100_Click()
и что бы каждый раз не писать

XXX100:
Print "ura"

его нужно вынести куда то и написать один раз. но обращаться программа будет туда из разных мест.


Автор: Voldemar2004 16.5.2005, 10:14
Цитата

В смысле?


Ну зачем Goto, если есть операторы If else end if, elseif, select case end select ?
Потом замучаешься крутить колесо мыши и бегать по экрану глазами в пойсках этой несчастной метки, связанной с Goto. smile

Автор: Guest 16.5.2005, 12:30
XXX100:
Print "ura"

его нужно вынести куда то и написать один раз. но обращаться программа будет туда из разных мест.
как сделать ??

Автор: Voldemar2004 16.5.2005, 15:45
Цитата

его нужно вынести куда то и написать один раз. но обращаться программа будет туда из разных мест.
как сделать ??


Module:
Код

Sub Message()
MsgBox ("Ja-Ja, Zergut")
End Sub


Form1:
Код

Private Sub Command1_Click()
' your code this
Call Message
' text's heap
End Sub


Form2:
Код

Private Sub Command1_Click()
' your code this
Call Message
' text's heap
End Sub

smile

Guest, что ты пишешь, если не секрет? Игру? smile

Автор: Guest 16.5.2005, 23:13
а зачем загружать форму2 ?

Автор: cardinal 17.5.2005, 01:17
Ну, Guest, это же просто пример smile, а про GoTo забудь, фигня это...

Давай уж регистрируйся, хватит быть гостем smile

Автор: Guest 17.5.2005, 18:36
Блин, вот код програмки


' Имеется форма на которой 4 label (LA1, LA2, LB1, LB2)
' На них наложены 4 кнопки (BA1, BA2, BB1, BB2)
' Выпадает случайное число для К (клад)
' Выпадает случайное число для В (выход)
' Если игрок нажал кнопку под которой ничего нет, игра продолжается.
' Если игрок попал на К - добавляется 100 очков
' Если игрок попал на В - происходит смена уровня (+1), все кнопки становятся видимыми.


Option Explicit
Dim klad As Integer
Dim vixod As Integer
Dim ochki As Integer
Dim level As Integer



Private Sub Form_Load()

level = 1
Label505 = 1

XXX100:

' все кнопки видимые
BA1.Visible = True
BA2.Visible = True
BB1.Visible = True
BB2.Visible = True

' обнуление вида ячеек
LA1 = ""
LA2 = ""
LB1 = ""
LB2 = ""

' определяем в какой ячейке клад и присваиваем выпавшему номеру ячейки букву К
Randomize
klad = Int((4 * Rnd) + 1)
If klad = 1 Then LA1 = "K"
If klad = 2 Then LA2 = "K"
If klad = 3 Then LB1 = "K"
If klad = 4 Then LB2 = "K"

' определяем в какой ячейке выход и присваиваем выпавшему номеру ячейки букву В
Randomize
vixod = Int((4 * Rnd) + 1)
If vixod = 1 Then LA1 = "B"
If vixod = 2 Then LA2 = "B"
If vixod = 3 Then LB1 = "B"
If vixod = 4 Then LB2 = "B"

' проверяем что бы не совпали ячейки выхода и клада. Если совпали, делаем расчет заново.
If klad = vixod Then GoTo XXX100

End Sub

' Нажата кнопка BA1. Кнопка исчезает показывая что под ней.
Private Sub BA1_Click()
BA1.Visible = False

' результат того что под кнопкой. Если под кнопкой К добавляем 100 очков, отображаем результат.
If LA1 = "K" Then Label501 = "Найден клад. + 100": ochki = ochki + 100: Label503 = ochki
If LA1 = "B" Then Label501 = "Найден выход.": level = level + 1: Label505 = level: GoTo XXX200

GoTo XXX205


XXX200:

' все кнопки видимые
BA1.Visible = True
BA2.Visible = True
BB1.Visible = True
BB2.Visible = True

' обнуление вида ячеек
LA1 = ""
LA2 = ""
LB1 = ""
LB2 = ""

' определяем в какой ячейке клад и присваиваем выпавшему номеру ячейки букву К
Randomize
klad = Int((4 * Rnd) + 1)
If klad = 1 Then LA1 = "K"
If klad = 2 Then LA2 = "K"
If klad = 3 Then LB1 = "K"
If klad = 4 Then LB2 = "K"

' определяем в какой ячейке выход и присваиваем выпавшему номеру ячейки букву В
Randomize
vixod = Int((4 * Rnd) + 1)
If vixod = 1 Then LA1 = "B"
If vixod = 2 Then LA2 = "B"
If vixod = 3 Then LB1 = "B"
If vixod = 4 Then LB2 = "B"

' проверяем что бы не совпали ячейки выхода и клада. Если совпали, делаем расчет заново.
If klad = vixod Then GoTo XXX200

XXX205:

End Sub

' Нажата кнопка BA2. Кнопка исчезает показывая что под ней.
Private Sub BA2_Click()
BA2.Visible = False

' результат того что под кнопкой. Если под кнопкой К добавляем 100 очков, отображаем результат.
If LA2 = "K" Then Label501 = "Найден клад. + 100": ochki = ochki + 100: Label503 = ochki
If LA2 = "B" Then Label501 = "Найден выход.": level = level + 1: Label505 = level: GoTo XXX200
GoTo XXX205

XXX200:

' все кнопки видимые
BA1.Visible = True
BA2.Visible = True
BB1.Visible = True
BB2.Visible = True

' обнуление вида ячеек
LA1 = ""
LA2 = ""
LB1 = ""
LB2 = ""

' определяем в какой ячейке клад и присваиваем выпавшему номеру ячейки букву К
Randomize
klad = Int((4 * Rnd) + 1)
If klad = 1 Then LA1 = "K"
If klad = 2 Then LA2 = "K"
If klad = 3 Then LB1 = "K"
If klad = 4 Then LB2 = "K"

' определяем в какой ячейке выход и присваиваем выпавшему номеру ячейки букву В
Randomize
vixod = Int((4 * Rnd) + 1)
If vixod = 1 Then LA1 = "B"
If vixod = 2 Then LA2 = "B"
If vixod = 3 Then LB1 = "B"
If vixod = 4 Then LB2 = "B"

' проверяем что бы не совпали ячейки выхода и клада. Если совпали, делаем расчет заново.
If klad = vixod Then GoTo XXX200

XXX205:
End Sub
' Нажата кнопка BB1. Кнопка исчезает показывая что под ней.
Private Sub BB1_Click()
BB1.Visible = False

' результат того что под кнопкой. Если под кнопкой К добавляем 100 очков, отображаем результат.
If LB1 = "K" Then Label501 = "Найден клад. + 100": ochki = ochki + 100: Label503 = ochki
If LB1 = "B" Then Label501 = "Найден выход.": level = level + 1: Label505 = level: GoTo XXX200
GoTo XXX205


XXX200:

' все кнопки видимые
BA1.Visible = True
BA2.Visible = True
BB1.Visible = True
BB2.Visible = True

' обнуление вида ячеек
LA1 = ""
LA2 = ""
LB1 = ""
LB2 = ""

' определяем в какой ячейке клад и присваиваем выпавшему номеру ячейки букву К
Randomize
klad = Int((4 * Rnd) + 1)
If klad = 1 Then LA1 = "K"
If klad = 2 Then LA2 = "K"
If klad = 3 Then LB1 = "K"
If klad = 4 Then LB2 = "K"

' определяем в какой ячейке выход и присваиваем выпавшему номеру ячейки букву В
Randomize
vixod = Int((4 * Rnd) + 1)
If vixod = 1 Then LA1 = "B"
If vixod = 2 Then LA2 = "B"
If vixod = 3 Then LB1 = "B"
If vixod = 4 Then LB2 = "B"

' проверяем что бы не совпали ячейки выхода и клада. Если совпали, делаем расчет заново.
If klad = vixod Then GoTo XXX200

XXX205:
End Sub


' Нажата кнопка BB2. Кнопка исчезает показывая что под ней.
Private Sub BB2_Click()
BB2.Visible = False

' результат того что под кнопкой. Если под кнопкой К добавляем 100 очков, отображаем результат.
If LB2 = "K" Then Label501 = "Найден клад. + 100": ochki = ochki + 100: Label503 = ochki
If LB2 = "B" Then Label501 = "Найден выход.": level = level + 1: Label505 = level: GoTo XXX200

GoTo XXX205

XXX200:

' все кнопки видимые
BA1.Visible = True
BA2.Visible = True
BB1.Visible = True
BB2.Visible = True

' обнуление вида ячеек
LA1 = ""
LA2 = ""
LB1 = ""
LB2 = ""

' определяем в какой ячейке клад и присваиваем выпавшему номеру ячейки букву К
Randomize
klad = Int((4 * Rnd) + 1)
If klad = 1 Then LA1 = "K"
If klad = 2 Then LA2 = "K"
If klad = 3 Then LB1 = "K"
If klad = 4 Then LB2 = "K"

' определяем в какой ячейке выход и присваиваем выпавшему номеру ячейки букву В
Randomize
vixod = Int((4 * Rnd) + 1)
If vixod = 1 Then LA1 = "B"
If vixod = 2 Then LA2 = "B"
If vixod = 3 Then LB1 = "B"
If vixod = 4 Then LB2 = "B"

' проверяем что бы не совпали ячейки выхода и клада. Если совпали, делаем расчет заново.
If klad = vixod Then GoTo XXX200


XXX205:
End Sub


-------------------------------------------------------------------------------------------------------------------------------------------------------------

На форме размещено 4 кнопки, но по замыслу их должно 400 (поле 20 х 20), как видите из программы ее часть повторяется при нажатии каждой кнопки.

--------------------------------------------------------------------------------------------------------------------------------------------------------------
XXX200:

' все кнопки видимые
BA1.Visible = True
BA2.Visible = True
BB1.Visible = True
BB2.Visible = True

' обнуление вида ячеек
LA1 = ""
LA2 = ""
LB1 = ""
LB2 = ""

' определяем в какой ячейке клад и присваиваем выпавшему номеру ячейки букву К
Randomize
klad = Int((4 * Rnd) + 1)
If klad = 1 Then LA1 = "K"
If klad = 2 Then LA2 = "K"
If klad = 3 Then LB1 = "K"
If klad = 4 Then LB2 = "K"

' определяем в какой ячейке выход и присваиваем выпавшему номеру ячейки букву В
Randomize
vixod = Int((4 * Rnd) + 1)
If vixod = 1 Then LA1 = "B"
If vixod = 2 Then LA2 = "B"
If vixod = 3 Then LB1 = "B"
If vixod = 4 Then LB2 = "B"

' проверяем что бы не совпали ячейки выхода и клада. Если совпали, делаем расчет заново.
If klad = vixod Then GoTo XXX200

----------------------------------------------------------------------------------------------------------------------------------------------------------


Если их 4 то это еще ладно, но когда их 400, то код увеличится до офигенных размеров. Вышеуказанная часть должна быть написана 1 раз, а не 400 раз (по 1000 строк в каждой ). Так вот как это сделать? Куда и как прописать этот кусочек кода, чтобы к нему обращаться при нажатии одной из 400 кнопок ???

Автор: cardinal 17.5.2005, 20:29
Для начала сделай функцию и вставь туда повторяющийся кусок:
Код

XXX200:

' все кнопки видимые
BA1.Visible = True
BA2.Visible = True
BB1.Visible = True
BB2.Visible = True

' обнуление вида ячеек
LA1 = ""
LA2 = ""
LB1 = ""
LB2 = ""

' определяем в какой ячейке клад и присваиваем выпавшему номеру ячейки букву К
Randomize
klad = Int((4 * Rnd) + 1)
If klad = 1 Then LA1 = "K"
If klad = 2 Then LA2 = "K"
If klad = 3 Then LB1 = "K"
If klad = 4 Then LB2 = "K"

' определяем в какой ячейке выход и присваиваем выпавшему номеру ячейки букву В
Randomize
vixod = Int((4 * Rnd) + 1)
If vixod = 1 Then LA1 = "B"
If vixod = 2 Then LA2 = "B"
If vixod = 3 Then LB1 = "B"
If vixod = 4 Then LB2 = "B"

' проверяем что бы не совпали ячейки выхода и клада. Если совпали, делаем расчет заново.
If klad = vixod Then GoTo XXX200

Как объявлять функции и т.д. найдешь тут:
http://vb.hut.ru/vbnovice/les1.htm
А вообще я тебе про это 15.05. говорил. Самому не хочется мозгами пораскинуть?

Автор: Guest 18.5.2005, 05:28
Так бы сразу и сказал, что делается это так:

Private Sub BA1_Click()
BA1.Visible = False
... текст программы...
Call XXX100
End Sub


Public Function XXX100() As Long
....Часто используемый код....
End Function

а то все вокруг да окола... smile smile

Автор: vADIKg 18.5.2005, 16:11
Не скажу, что я спец, но это работает. http://www.alpari-idc.ru/ru/forum/images/smiles/icon_rolleyes.gifНужно только накопировать в форме нужное количество кнопок и меток. Код вообще не нужно трогать.

И все.

Тестил при 100 - работает

Код

' Èìååì array èç Command1 - êíîïêè
'       array èç Label1   - ïîìåòêè
'       Label2            - óêàçûâàåò óðîâåíü
'       Label3            - ïîêàçûâàåò êîë-âî î÷êîâ

Option Explicit
Dim klad As Integer
Dim vixod As Integer
Dim ochki As Integer
Dim level As Integer
Dim btnsNumber As Integer ' êîëè÷åñòâî êíîïåíåé
Dim i As Integer

Private Sub Form_Load()
    level = 0
    ochki = 0
    btnsNumber = Command1.Count ' [font=arial]ãîâîðèì, ñêîêà êíîïîê èìååòñÿ[/font]    Call Update
    Label3.Caption = "0"
End Sub

Private Sub Update()
    level = level + 1
    Label2.Caption = Str(level)
    For i = 0 To btnsNumber - 1
        Command1(i).Visible = True
        Label1(i).Caption = ""
    Next
    Randomize
    Do
        klad = Int(btnsNumber * Rnd)
        vixod = Int(btnsNumber * Rnd)
    Loop While klad = vixod
    Label1(klad).Caption = "K"
    Label1(vixod).Caption = "K"
'    MsgBox Str(klad) & " " & Str(vixod) ' ïîäñêàçêà
End Sub

Private Sub Command1_Click(Index As Integer)
    Select Case Index
        Case klad
            MsgBox "Klad"
            Command1(Index).Visible = False
            ochki = ochki + 100
            Label3.Caption = Str(ochki)
        Case vixod
            MsgBox "Vixod"
            Call Update
        Case Else
            Command1(Index).Visible = False
    End Select
End Sub



Автор: cardinal 18.5.2005, 18:25
Цитата(vADIKg @ 18.5.2005, 14:11)
Нужно только накопировать в форме нужное количество кнопок и меток

И сделать из них массив!

Автор: vADIKg 19.5.2005, 07:00
Цитата(cardinal @ 18.5.2005, 18:25)
И сделать из них массив!

Да, конечно. В камментах написано, что имеем массивы Command1 и Label1. Вначале создаем массивчики объектов, а дальше copy-paste, пока не надоест.

Автор: Exception 20.5.2005, 11:33
[offtop]
Цитата(cardinal @ 15.5.2005, 22:09)
Ходилку по лабиринту

скорее "запутывалку форумчан" smile [/offtop]

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)