Простой вопрос, а я не знаю

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Андрей Васюта
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 91
Зарегистрирован: 20.07.2004 (Вт) 19:40

Простой вопрос, а я не знаю

Сообщение Андрей Васюта » 16.12.2004 (Чт) 9:02

У меня простой вопрос, как организовать сложение двух (или более) значений TextBox-ов, я никогда не интересовался этим, а вот теперь сижу. Умножение, деление, вычетание есть - а вот сложение...

Private Sub CommandButton1_Click()
TextBox3.Value = TextBox1.Value + TextBox2.Value
End Sub
Вы сами знаете какой итог получится.
Большой программе - большие глюки.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.12.2004 (Чт) 9:21

Val(TextBox1.Value)
CSng(TextBox1.Value)
Lasciate ogni speranza, voi ch'entrate.

Gfif21
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 31.05.2004 (Пн) 7:23

Re: Простой вопрос, а я не знаю

Сообщение Gfif21 » 16.12.2004 (Чт) 9:59

Private Sub CommandButton1_Click()
TextBox3.Text = TextBox1.Text + TextBox2.Text
End Sub

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.12.2004 (Чт) 10:20

Gfif21 писал(а):Private Sub CommandButton1_Click()
TextBox3.Text = TextBox1.Text + TextBox2.Text
End Sub
Не сработает.

А вот так сработает:
Код: Выделить всё
Private Sub CommandButton1_Click()
TextBox3 = 0 + TextBox1 + TextBox2
End Sub
Изображение

Gfif21
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 31.05.2004 (Пн) 7:23

Сообщение Gfif21 » 16.12.2004 (Чт) 11:04

tyomitch писал(а):
Gfif21 писал(а):Private Sub CommandButton1_Click()
TextBox3.Text = TextBox1.Text + TextBox2.Text
End Sub
Не сработает.

Ну не знаю, у меня все работает.

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 16.12.2004 (Чт) 11:18

А вот так сработает:
Код: Выделить всё
Private Sub CommandButton1_Click()
TextBox3 = 0 + TextBox1 + TextBox2
End Sub 


Хм... Имхо на автоматику лучше не полагаться :?
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.12.2004 (Чт) 12:17

Gfif21 писал(а):
tyomitch писал(а):
Gfif21 писал(а):Private Sub CommandButton1_Click()
TextBox3.Text = TextBox1.Text + TextBox2.Text
End Sub
Не сработает.

Ну не знаю, у меня все работает.

Твой код выдаст, что 2 + 3 = 23. А мой - что 5. Разница ясна? :-)
Изображение

Gfif21
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 31.05.2004 (Пн) 7:23

Сообщение Gfif21 » 16.12.2004 (Чт) 12:43

tyomitch писал(а):
Gfif21 писал(а):
tyomitch писал(а):
Gfif21 писал(а):Private Sub CommandButton1_Click()
TextBox3.Text = TextBox1.Text + TextBox2.Text
End Sub
Не сработает.

Ну не знаю, у меня все работает.

Твой код выдаст, что 2 + 3 = 23. А мой - что 5. Разница ясна? :-)

Ну если именно складывать численные значения, то конечно мой код не будет работать. Я просто понял, что значения текстовых полей-текст, а не цифры.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Простой вопрос, а я не знаю

Сообщение tyomitch » 16.12.2004 (Чт) 12:53

Андрей Васюта писал(а):Умножение, деление, вычетание есть - а вот сложение...

Gfif21, текст или цифры? ;-)
Изображение

Gfif21
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 71
Зарегистрирован: 31.05.2004 (Пн) 7:23

Re: Простой вопрос, а я не знаю

Сообщение Gfif21 » 16.12.2004 (Чт) 13:17

tyomitch писал(а):
Андрей Васюта писал(а):Умножение, деление, вычетание есть - а вот сложение...

Gfif21, текст или цифры? ;-)

Ну я сначала прочитал про сложение значений текстовых полей, поэтому и написал код для текста. Но судя по тому, что он собирается эти значения не только складывать, но и умножать, делить и вычитать, то все-таки цифры :D Надо было до конца пост почитать :oops:

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 16.12.2004 (Чт) 13:34

2All: а чем не приглянулись CLng и CSng?

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 17.12.2004 (Пт) 21:37

alibek писал(а):Val(TextBox1.Value)
CSng(TextBox1.Value)
:wink:

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 17.12.2004 (Пт) 22:20

А нелегче всё загнать в переменные типа Integer
Код: Выделить всё
Dim a as Integer
Dim b as Integer
Dim c as Integer

a = txt1.Text
b = txt2.Text

c = a + b

txt3.Text = c


И считать будет правильно !

:wink:
Max!

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 17.12.2004 (Пт) 22:29

A.A.Z. писал(а):
alibek писал(а):Val(TextBox1.Value)
CSng(TextBox1.Value)
:wink:

Упс 8)

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Сообщение areh » 17.12.2004 (Пт) 22:38

Max!, а если кому-то захочется сложить не целые числа, например 2.5 + 3.5, твой код ругаться будет...
так что надо использовать функции преобразования строки в число (Val, CSng), а ещё неплохо перед использованием этих функций менять в тексте запятую на точку...

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 18.12.2004 (Сб) 0:53

Если с запятой то неругается у меня , а вобще простоубери тип Integer и не чё неставь тогда точно небудет ругаться !

:wink:
Max!

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Сообщение areh » 18.12.2004 (Сб) 0:57

конечно не будет, и снова 2 и 3 в сумме будут давать 23...

вообщем спор пошел не по делу... я умолкаю

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 18.12.2004 (Сб) 19:04

alibek писал(а):Val(TextBox1.Value)
CSng(TextBox1.Value)

Не совсем. Val() не понимает национальные разделители десятичной части, поэтому при его использовании в предположении наличия дробных чисел надо писать так:
Код: Выделить всё
MsgBox Val(Replace(Me.Text1.Text, ",", ".")) + Val(Replace(Me.Text2.Text, ",", "."))

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.12.2004 (Пн) 8:36

Ennor, если уж на то пошло, то где гарантии того, что разделителем будет запятая, а не апостоф? Тогда надо юзать GetLocaleInfo. Но даже это не спасет от тех извращенцев, которые ставят одинаковый разделитель дробной и целой части, и разделитель групп.
Потому я и написал Val (для строк, получаемых Str()) и CSng (для учета национальных особенностей).
Lasciate ogni speranza, voi ch'entrate.

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 20.12.2004 (Пн) 11:25

А если з запято то можно так
Код: Выделить всё
a as single
a=text1.text

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 20.12.2004 (Пн) 13:26

2areh
конечно не будет, и снова 2 и 3 в сумме будут давать 23...

вообщем спор пошел не по делу... я умолкаю


Каким макаром это произойдёт ? Всё нормально он складывает ! Ты сам попробуй

Вариант1
Код: Выделить всё
Private Sub Command1_Click()
Dim a
Dim b
Dim c
a = 2
b = 3
c = a + b
MsgBox "" & c
End Sub

В результате у меня получилось 5 !

Вариант 2

Код: Выделить всё
Private Sub Command1_Click()
Dim a
Dim b
Dim c
a = 2.5
b = 3.6
c = a + b
MsgBox "" & c
End Sub


В результате у меня получилось 6,1 !

Я невижу 23 !!!

:wink:
Max!

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 20.12.2004 (Пн) 18:50

alibek, я много с какими настройками сталкивался, и ни разу не видел не одной, где разделитель десятичной части (не тысяч - на тысячи мне накласть) был бы не точкой и не запятой. Не спорю, может существовать локейл, в котором это будет какой-нить изврат, тогда придется тянуть GetLocaleInfo(), это да. Можно наоборот сделать - приводить точку к национальному локейлу и подавать на вход CDbl(), а не Val(), но она более чувствительна к левым буквам в строке.

Ну а если человек записал, допустим, 1.000.000.057, то как программа сможет угадать, что он имеет в виду? Комп угадывать плохо умеет, ну и выдаст, соотв-но, единицу целых и ноль десятых...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.12.2004 (Вт) 8:55

Ennor, а я сталкивался с настройками, когда разделитель дробной и целой части - запятая, а разделитель групп - десятичная точка (локаль была русская, это пользователь был извращенец). А в таких условиях Replace(..., ",", ".") ведет себя очень нехорошо.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.12.2004 (Вт) 14:39

Max! писал(а):2areh
конечно не будет, и снова 2 и 3 в сумме будут давать 23...

вообщем спор пошел не по делу... я умолкаю


Каким макаром это произойдёт ? Всё нормально он складывает ! Ты сам попробуй

Вариант1
Код: Выделить всё
Private Sub Command1_Click()
Dim a
Dim b
Dim c
a = 2
b = 3
c = a + b
MsgBox "" & c
End Sub

В результате у меня получилось 5 !

Вариант 2

Код: Выделить всё
Private Sub Command1_Click()
Dim a
Dim b
Dim c
a = 2.5
b = 3.6
c = a + b
MsgBox "" & c
End Sub


В результате у меня получилось 6,1 !

Я невижу 23 !!!

:wink:

Max, ты не прав.
Код: Выделить всё
Private Sub Command1_Click()
Dim a
Dim b
Dim c
a = "2"
b = "3"
c = a + b
MsgBox "" & c
End Sub
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 22

    TopList