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

Как сделать вычисления внутри диалогового окна, а не по сообщению

06.04.2013, 20:46. Показов 1203. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как в VisualBasic 2010 сделать так, чтобы все вычисления проходили внутри диалогового окна? К примеру вводим число и результат без каких-либо нажатий преобразовывался в другое окно.
Заранее спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.04.2013, 20:46
Ответы с готовыми решениями:

Как присвоить переменную одного диалогового окна к переменной другого диалогового окна? (ООП)
Вот у меня есть результат вычисления и я его присваиваю переменной в первом диалоговом окне, но я хочу выдать результат во второе...

Bitmap с фоновым цветом диалогового окна (как сделать?)
Будьте добры, подскажите незнающему: как вставить в диалоговое окно bitmap с прозрачным фоном? Точнее, чтобы фон автоматически не менялся...

Выполнение макроса внутри диалогового окна Excel
Доброго времени суток, уважаемые гуру! Подскажите, пожалуйста, можно ли запустить выполнение макроса внутри диалогового окна, и в случае...

11
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 445
06.04.2013, 23:30
FindWindow(), SendMessage
0
 Аватар для LMM
56 / 56 / 2
Регистрация: 17.02.2011
Сообщений: 234
Записей в блоге: 10
07.04.2013, 00:31
Macro, Никак. Тебе в любом случае придется что-то нажать, будь это кнопка ОК или просто кнопка Enter на клавиатуре.
Можно лишь сделать Input диалоговое окно, в которое пользователь что-то введет и понажатию Enter или ОК выполнится код, который задумывался. А уж как будет выстроен код и будет ли выводиться он пользователю или нет, это уже зависит от цели.
0
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 9
09.04.2013, 22:54  [ТС]
Мне нужно, чтобы пользователь вводил числовое значение и ему моментально был представлен результат, как так сделать? Можно пожалуйста подробнее объяснить
0
525 / 487 / 99
Регистрация: 25.12.2011
Сообщений: 1,176
09.04.2013, 23:06
А свою форму нельзя использовать?
0
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 9
09.04.2013, 23:24  [ТС]
Цитата Сообщение от Jason Посмотреть сообщение
А свою форму нельзя использовать?
в каком смысл?
0
 Аватар для Nachrichter
649 / 601 / 92
Регистрация: 19.03.2012
Сообщений: 1,128
09.04.2013, 23:28
Цитата Сообщение от Macro Посмотреть сообщение
Мне нужно, чтобы пользователь вводил числовое значение и ему моментально был представлен результат
Можно в таймере ожидать ввода чисел или в On Error Goto "зациклиться" попробовать.
0
525 / 487 / 99
Регистрация: 25.12.2011
Сообщений: 1,176
10.04.2013, 04:14
Цитата Сообщение от Macro Посмотреть сообщение
все вычисления проходили внутри диалогового окна
Я не понял ты хочешь использовать InputBox? Думаю не как ты не сделаешь такого (ну или передумаешь увидив код).
Вот набросал:
(на форме кнопку и таймер)
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
Imports System.Runtime.InteropServices
Imports System.Text
 
Public Class Form1
 
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function SetWindowText(ByVal hwnd As IntPtr, ByVal lpString As String) As Boolean
    End Function
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function GetWindowText(ByVal hwnd As IntPtr, ByVal lpString As StringBuilder, ByVal cch As Integer) As Integer
    End Function
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindow( _
     ByVal lpClassName As String, _
     ByVal lpWindowName As String) As IntPtr
    End Function
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, _
                      ByVal childAfter As IntPtr, _
                      ByVal lclassName As String, _
                      ByVal windowTitle As String) As IntPtr
    End Function
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function GetWindowTextLength(ByVal hwnd As IntPtr) As Integer
    End Function
 
    Dim Title As String = "INPUT EDIT"
    Dim TextLabel As String = "ENTER TEXT!"
    Dim StartText As String = ""
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        InputBox(TextLabel, Title, StartText)
    End Sub
 
    Dim HwndLabel As IntPtr
    Dim HwndTextBox As IntPtr
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim HWND As IntPtr = FindWindow(vbNullString, Title)
        If HWND <> 0 Then
            Dim HwndLabel As IntPtr = FindWindowEx(HWND, 0, vbNullString, TextLabel)
            Dim HwndTextBox As IntPtr = FindWindowEx(HWND, 0, vbNullString, StartText)
            If HwndTextBox <> 0 Then
                Dim A As String = GetText(HwndTextBox)
                If NumBool(A) = False Then
                    SetWindowText(HwndLabel, "ERROR!")
                    TextLabel = "ERROR!"
                Else
                    SetWindowText(HwndLabel, A & "+" & A & "=" & Val(A) + Val(A))
                    TextLabel = A & "+" & A & "=" & Val(A) + Val(A)
                End If
            End If
        Else
            HwndLabel = 0
            HwndTextBox = 0
        End If
    End Sub
 
    Public Function GetText(ByVal hWnd As IntPtr) As String
        Dim length As Integer
        If hWnd.ToInt32 = 0 Then
            Return Nothing
        End If
        length = GetWindowTextLength(hWnd)
        If length = 0 Then
            Return Nothing
        End If
        Dim sb As New System.Text.StringBuilder("", length)
 
        GetWindowText(hWnd, sb, sb.Capacity + 1)
        Return sb.ToString()
    End Function
 
    Public Function NumBool(ByVal Text As String) As Boolean
        NumBool = True
        If Text = vbNullString Then
            Return False
        End If
        For i = 0 To Text.Length - 1 Step 1
            If IsNumeric(Text(i)) = False Then
                Return False
            End If
        Next
    End Function
 
End Class
Только вот оно почему то не обновляется), т.е. надо свернуть (окно inputbox) или вынести за пределы экрана (чтобы текст небыло видно).

Цитата Сообщение от Macro Посмотреть сообщение
в каком смысл?
Создать отдельную форму (как inputbox) и используешь ее...
0
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 445
13.04.2013, 12:45
Цитата Сообщение от Jason Посмотреть сообщение
Я не понял ты хочешь использовать InputBox? Думаю не как ты не сделаешь такого (ну или передумаешь увидив код).
Вот набросал:
(на форме кнопку и таймер)
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
Imports System.Runtime.InteropServices
Imports System.Text
 
Public Class Form1
 
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function SetWindowText(ByVal hwnd As IntPtr, ByVal lpString As String) As Boolean
    End Function
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function GetWindowText(ByVal hwnd As IntPtr, ByVal lpString As StringBuilder, ByVal cch As Integer) As Integer
    End Function
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindow( _
     ByVal lpClassName As String, _
     ByVal lpWindowName As String) As IntPtr
    End Function
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, _
                      ByVal childAfter As IntPtr, _
                      ByVal lclassName As String, _
                      ByVal windowTitle As String) As IntPtr
    End Function
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function GetWindowTextLength(ByVal hwnd As IntPtr) As Integer
    End Function
 
    Dim Title As String = "INPUT EDIT"
    Dim TextLabel As String = "ENTER TEXT!"
    Dim StartText As String = ""
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        InputBox(TextLabel, Title, StartText)
    End Sub
 
    Dim HwndLabel As IntPtr
    Dim HwndTextBox As IntPtr
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim HWND As IntPtr = FindWindow(vbNullString, Title)
        If HWND <> 0 Then
            Dim HwndLabel As IntPtr = FindWindowEx(HWND, 0, vbNullString, TextLabel)
            Dim HwndTextBox As IntPtr = FindWindowEx(HWND, 0, vbNullString, StartText)
            If HwndTextBox <> 0 Then
                Dim A As String = GetText(HwndTextBox)
                If NumBool(A) = False Then
                    SetWindowText(HwndLabel, "ERROR!")
                    TextLabel = "ERROR!"
                Else
                    SetWindowText(HwndLabel, A & "+" & A & "=" & Val(A) + Val(A))
                    TextLabel = A & "+" & A & "=" & Val(A) + Val(A)
                End If
            End If
        Else
            HwndLabel = 0
            HwndTextBox = 0
        End If
    End Sub
 
    Public Function GetText(ByVal hWnd As IntPtr) As String
        Dim length As Integer
        If hWnd.ToInt32 = 0 Then
            Return Nothing
        End If
        length = GetWindowTextLength(hWnd)
        If length = 0 Then
            Return Nothing
        End If
        Dim sb As New System.Text.StringBuilder("", length)
 
        GetWindowText(hWnd, sb, sb.Capacity + 1)
        Return sb.ToString()
    End Function
 
    Public Function NumBool(ByVal Text As String) As Boolean
        NumBool = True
        If Text = vbNullString Then
            Return False
        End If
        For i = 0 To Text.Length - 1 Step 1
            If IsNumeric(Text(i)) = False Then
                Return False
            End If
        Next
    End Function
 
End Class
Только вот оно почему то не обновляется), т.е. надо свернуть (окно inputbox) или вынести за пределы экрана (чтобы текст небыло видно).


Создать отдельную форму (как inputbox) и используешь ее...
Не во всех случаях работает SetWindowText.
Безпроигрышный вариант это SendMessage(hwnd,0,WM_SETTEXT,strText)
0
525 / 487 / 99
Регистрация: 25.12.2011
Сообщений: 1,176
13.04.2013, 14:33
Цитата Сообщение от Micro Посмотреть сообщение
Не во всех случаях работает SetWindowText.
Безпроигрышный вариант это SendMessage(hwnd,0,WM_SETTEXT,strText)
В данном случае он будет всегда работать).
0
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 445
13.04.2013, 15:54
Извеняюсь, перепутал с функцией GetWindowText()
0
0 / 0 / 0
Регистрация: 19.01.2013
Сообщений: 9
19.05.2013, 17:58  [ТС]
Цитата Сообщение от Jason Посмотреть сообщение
В данном случае он будет всегда работать).
спасибо))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.05.2013, 17:58
Помогаю со студенческими работами здесь

Как сделать выравнивание по левому краю заголовка диалогового окна?
В свойствах диалога не нашел данной функции, на msdn нужной функции так же не нашел... Есть какие варианты? По средине как-то не очень...

Как сделать кнопки диалогового окна не активными на время выполнения процесса??
Уважаемые господа. Помогите пожалуйста новичку. Для управления неким устройством я создал диалоговое окно с набором кнопок с помощью...

Как сделать так чтобы, при нажатии на кнопку половина диалогового окна закрашивалась красным цветом?
Как сделать так чтобы, при нажатии на кнопку половина диалогового окна закрашивалась красным цветом?

Как в массиве найти нужный диапазон и сделать вычисления по данным внутри этого диапазона
Есть массив данных (таблица), в моем примере: Наименование Банков | Кор.счет | Дебет | Кредит| Пользователь указывает по каким...

Как создать шаблон диалогового окна?
Здравствуйте Есть функция: DialogBox(hInst, MAKEINTRESOURCE(шаблон), hWnd, (DLGPROC)DialogWidthProc) она создаёт модальное окно по...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru