Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 131
.NET 4.x

Программа, написанная на VB.NET не правильно считает на других компьютерах

21.05.2017, 18:27. Показов 2695. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый день!
Я работаю в сфере строительства и для облегчения расчетов и подготовки документов написал некую программу, которая считает расход материала, площадь, объем и т.д.
У меня на компьютере программа работает идеально, но при установке ее на другие компьютеры коллег - программа выводит расчеты по нолям. При чем на некоторых компьютерах она все-же считает правильно и выдает верный результат.
Я просто ума не приложу почему такое может быть?
Сам я не асс в программировании, скорее это как хобби
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.05.2017, 18:27
Ответы с готовыми решениями:

Программа, написанная в Visual studio 2012 х64 не открывается на других РС
Добрый верер, решил написать простенькую игру на C++ для windows использовал Microsoft Visual Studio 2012 x64 система windows 8.1, нажимаю...

Будет программа, написанная через Windows Form Application работать на других ОС?
Будет программа, написанная через Windows Form Application работать на других ОС? Я использую Microsoft Visual C++ 2010

Программа не работает на других компьютерах
Вообщем для друга писал на ноуте программу.Много времени потратил.Марался с интерфейсом.Но почему то только на моем ноуте эта прога...

24
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
21.05.2017, 18:29
Не видя кода программы можно только гада тчо там может быть не так. Например региональные настройки разные на компьютерах, а вы этого не учли...
0
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 131
21.05.2017, 18:36  [ТС]
Ну вот, к примеру фрагмент кода, который при вводе в текстовое поле значения площади - считает расход эмалей

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
        ListBox4.Items.Clear()
        If TextBox3.Text = String.Empty Then
            MsgBox("Укажите площадь поверхности для очистки и АКЗ", vbInformation, "Ошибка!")
        Else
            If Check1 = True Then
                R6 = K6 * Val(TextBox3.Text)
                R6 = Math.Round(R6, 3)
                ListBox4.Items.Add("Абразивный порошок - " & R6 & " т")
                R6 = 0
            End If
 
            If Check2 = True Then
                R7 = K7 * Val(TextBox3.Text)
                R7 = Math.Round(R7, 3)
                ListBox4.Items.Add("Уайт спирит - " & R7 & " кг")
                R7 = 0
            End If
 
            If Check3 = True Then
                R1 = R1 + K1
                On Error Resume Next
                R1 = R1 * Val(TextBox3.Text)
                R1 = Math.Round(R1, 3)
                SolvUR1 = R1 * 0.05 'Расчет количества растворителя Сольв-УР
                ListBox4.Items.Add("Эмаль КО-198 - " & R1 & " кг")
            End If
 
            If Check4 = True Then
                R2 = R2 + K2
                On Error Resume Next
                R2 = R2 * Val(TextBox3.Text)
                R2 = Math.Round(R2, 3)
                SolvUR2 = R2 * 0.05 'Расчет количества растворителя Сольв-УР
                ListBox4.Items.Add("Эмаль Цинотан - " & R2 & " кг")
            End If
 
            If Check5 = True Then
                R3 = R3 + K3
                On Error Resume Next
                R3 = R3 * Val(TextBox3.Text)
                R3 = Math.Round(R3, 3)
                SolvUR3 = R3 * 0.05 'Расчет количества растворителя Сольв-УР
                ListBox4.Items.Add("Эмаль Политон-УР - " & R3 & " кг")
            End If
 
            If Check6 = True Then
                R4 = R4 + K4
                On Error Resume Next
                R4 = R4 * Val(TextBox3.Text)
                R4 = Math.Round(R4, 3)
                SolvUR4 = R4 * 0.05 'Расчет количества растворителя Сольв-УР
                ListBox4.Items.Add("Эмаль Политон-УР(УФ) - " & R4 & " кг")
            End If
 
            If Check7 = True Then
                ResultSolvUR = SolvUR1 + SolvUR2 + SolvUR3 + SolvUR4
                ResultSolvUR = Math.Round(ResultSolvUR, 3)
                ListBox4.Items.Add("Растворитель Сольв-УР - " & ResultSolvUR & " кг")
            End If
        End If
 
        SolvUR1 = 0
        SolvUR2 = 0
        SolvUR3 = 0
        SolvUR4 = 0
        R1 = 0
        R2 = 0
        R3 = 0
        R4 = 0
        ResultSolvUR = 0
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4359 / 3429 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
21.05.2017, 18:59
а что такое R1,2,3 и K1,2,3? Какой тип этих переменных?
0
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 131
21.05.2017, 19:03  [ТС]
R1,2,3 это просто переменные, которые при загрузке программы равны 0 и их суть только в том, чтобы конечный результат вывести пользователю.
K1,2,3 это переменные, которые при загрузке программы равны коэффициенту расхода эмали на 1 м2 например:
k1 = 0.15
K2 = 0.18
и т.д.

Тип переменных double
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
21.05.2017, 19:22
Я бы для начала все Val заменил на православный Double.Parse, т.к. у меня например
при вводе в текстбокс 1.1 Val возвращает 1.1, а при вводе 1,1 возвращает 1
при вводе в текстбокс 0.1 Val возвращает 0.1, а при вводе 0,1 возвращает 0

Double.Parse выдал бы исключение в одном из этих случаев в зависимости от региональных настроек...
0
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 131
21.05.2017, 19:26  [ТС]
Можете пример с double.parse привести на моем примере? А то я никогда никогда не сталкивался с этим
0
1741 / 1654 / 167
Регистрация: 25.07.2015
Сообщений: 2,717
21.05.2017, 19:31
AMG38, для начала я бы посоветовал поменять
оператор преобразования val на явный CDbl, т.к. val понимает в качестве
десятичного разделителя только точку, запятую проигнорит.
T-SQL
1
R4 = R4 * CDbl(TextBox3.Text)
и заменил бы устаревший On Error Resume Next на Try..Catch, глядишь
и какая то ошибка высветится , а не проигнорится.

Добавлено через 57 секунд
Цитата Сообщение от Someone007 Посмотреть сообщение
Я бы для начала все Val заменил на православный Double
опередили
1
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
21.05.2017, 19:32
Лучший ответ Сообщение было отмечено AMG38 как решение

Решение

Ну например вот так
VB.NET
1
2
3
4
5
6
7
8
9
    R6 = K6 * ParseTextToDouble(TextBox3.Text)
 
    Private Function ParseTextToDouble(text As String) As Double
        Try
            Return Double.Parse(text.Replace(",", "."), System.Globalization.CultureInfo.InvariantCulture)
        Catch ex As Exception
            Return 0 ' в случае если строку невозможно преобразовать в Double вернем 0
        End Try
    End Function
1
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 131
21.05.2017, 19:46  [ТС]
Кстати, хотел сказать, чтобы исключить ошибки с вводом запятой в качестве дробного разделителя - я запретил ввод запятой в текстовое поле. Это что-нибудь меняет?

Добавлено через 7 минут
Все равно спасибо за отзывчивость))
0
1741 / 1654 / 167
Регистрация: 25.07.2015
Сообщений: 2,717
21.05.2017, 19:49
Цитата Сообщение от AMG38 Посмотреть сообщение
я запретил ввод запятой в текстовое поле.
Может да, а может и нет.
Предложенный Someone007, вариант -это ведь исправление только одного из возможных косяков.
Исходим из той информации, которую вы нам предоставили...полного кода то мы не видим.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
21.05.2017, 19:49
Цитата Сообщение от AMG38 Посмотреть сообщение
я запретил ввод запятой в текстовое поле. Это что-нибудь меняет?
Значит будет работать только на системах, где десятичный разделитель - точка. А где запятая, числа будут округляться 1.1->1; 0.1->0 и т.д.
0
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 131
21.05.2017, 20:04  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Значит будет работать только на системах, где десятичный разделитель - точка. А где запятая, числа будут округляться 1.1->1; 0.1 > 0 и т.д.
То есть, если проблема в этом, то нужно использовать предложенный Вами вариант решения проблемы?

Добавлено через 6 минут
Цитата Сообщение от Kulma Посмотреть сообщение
Может да, а может и нет.
Предложенный Someone007, вариант -это ведь исправление только одного из возможных косяков.
Исходим из той информации, которую вы нам предоставили...полного кода то мы не видим.
Спасибо, завтра попробую внести изменения в код и запустить на других компьютерах
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
21.05.2017, 20:04
Цитата Сообщение от AMG38 Посмотреть сообщение
То есть, если проблема в этом, то нужно использовать предложенный Вами вариант решения проблемы?
Может в этом, а может и не в этом, мы же весь код не видели.
0
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 131
22.05.2017, 11:05  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Может в этом, а может и не в этом, мы же весь код не видели.
Из того, что вы не видели, то это только как присваиваются значения переменным, которые отвечают за коэффициент расхода эмалей...
VB.NET
1
2
3
4
5
6
7
        Form1.Enabled = True
        If Me.DialogResult = System.Windows.Forms.DialogResult.OK Then
            K1 = Val(TextBox1.Text)
            K2 = Val(TextBox2.Text)
            K3 = Val(TextBox3.Text)
            K4 = Val(TextBox4.Text)
            K5 = 0.05
Добавлено через 14 часов 54 минуты
Цитата Сообщение от Someone007 Посмотреть сообщение
Значит будет работать только на системах, где десятичный разделитель - точка. А где запятая, числа будут округляться 1.1->1; 0.1->0 и т.д.
Спасибо за дельный совет, действительно проблема заключалась именно в этом.
0
 Аватар для vova2112
148 / 136 / 34
Регистрация: 28.02.2014
Сообщений: 165
22.05.2017, 11:24
Лучший ответ Сообщение было отмечено AMG38 как решение

Решение

Недавно была тема по поводу десятичного разделителя на разных системах, можно немного изменить пример от Someone007:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    R6 = K6 * ParseTextToDouble(TextBox3.Text)
 
    Private Function ParseTextToDouble(text As String) As Double
        Dim en As New Globalization.CultureInfo(1033)
        Dim ru As New Globalization.CultureInfo(1049)
        Dim DVal As Double
                Select Case True
                    Case Double.TryParse(text, Globalization.NumberStyles.AllowDecimalPoint, ru, DVal)
                    Case Double.TryParse(text, Globalization.NumberStyles.AllowDecimalPoint, en, DVal)
                    Case Else
                        DVal = Nothing
                End Select
            Return DVal
    End Function
2
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 131
22.05.2017, 12:18  [ТС]
Цитата Сообщение от vova2112 Посмотреть сообщение
Недавно была тема по поводу десятичного разделителя на разных системах, можно немного изменить пример от Someone007:
Спасибо, применил
0
9 / 9 / 0
Регистрация: 25.04.2013
Сообщений: 53
26.05.2017, 06:55
Добавь этот фрагмент при загрузки основной формы
VB.NET
1
2
3
4
5
6
' Разделитель целой и дробной цасти
        DecSeporator = My.Computer.Info.InstalledUICulture.NumberFormat.NumberDecimalSeparator
        ' Меняем системный разделитель целой и дробной части
        Dim inf As New CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name)
        System.Threading.Thread.CurrentThread.CurrentCulture = inf
        inf.NumberFormat.NumberDecimalSeparator = "."
0
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 131
26.05.2017, 06:58  [ТС]
Цитата Сообщение от Qusar Посмотреть сообщение
Добавь этот фрагмент при загрузки основной формы
VB.NET
1
2
3
4
5
6
' Разделитель целой и дробной цасти
DecSeporator = My.Computer.Info.InstalledUICulture.NumberFormat.NumberDecimalSeparator
' Меняем системный разделитель целой и дробной части
Dim inf As New CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name)
System.Threading.Thread.CurrentThread.CurrentCulture = inf
inf.NumberFormat.NumberDecimalSeparator = "."
Разделитель целой и дробной части меняется только на время выполнения программы?
0
9 / 9 / 0
Регистрация: 25.04.2013
Сообщений: 53
26.05.2017, 06:59
Да.
и еще в начало
VB.NET
1
Dim DecSeporator As String
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.05.2017, 06:59
Помогаю со студенческими работами здесь

Моя программа на других компьютерах
Почему когда я напишу какую нибудь программу на с++(проект win 32, не консольное) у меня всё запускается всё отлично, но если я скину...

Не работает программа на других компьютерах
Здравствуйте. Скопипастил написал программу на сокетах (пример взят с учебника), запустил. Всё работает нормально, ошибок и вылетов нет....

Программа не запускается на других компьютерах
Собственно, по ссылке она и есть http://dropmefiles.com/GipCR . Я и гуглил, и mfc статичными делал и с dll, и прочие галочки менял, и...

Программа на других компьютерах завершается аварийно
Здравствуйте, у меня дикая проблема: я написал программу (кинуть код не могу, он очень большой, 6к), на моём компьютере работает идеально,...

Как правильно вытащить exe файл из си шарпа, чтобы он работал на других компьютерах?
Помогите пожалуйста, я создала Информационную систему на си шарпе (с подключением к SQL). Мне нужно, чтобы эта программа работала...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru