Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/106: Рейтинг темы: голосов - 106, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 102
1

Использование MsgBox с кнопками "Да" и "Нет"

04.01.2014, 19:31. Показов 19876. Ответов 17
Метки нет (Все метки)

Доброго всем времени суток!
Пишу игрушку и не могу понять, как задать функции для кнопок которые открываются в MsgBox.
Например: при нажатии кнопки выход идет проверка условия была ли нажата кнопка сохранения, если да то игра закрывается, если нет то вылетает сообщение с тремя кнопками "да, нет, отмена". Мне необходимо чтобы при нажатии кнопки "Да" - игра закрывалась, "Нет" - закрывалось сообщение, и третью кнопку необходимо переименовать в "Сохранить и выйти" - где происходить запись результата и игра закрывается
код кнопки
VB.NET
1
2
3
4
5
6
7
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        If l > 0 Then
            End
        ElseIf MsgBox("Вы действительно хотите выйти не сохранив результаты?", MsgBoxStyle.YesNoCancel) Then
        
        End If
    End Sub

код записи
VB.NET
1
2
3
4
5
6
7
 l = l + 1
        Dim result As StreamWriter
        Dim save As New System.IO.StreamWriter("D:\1.txt", True)
        save.Write(imya)
        save.Write(" ")
        save.Write(cash & vbCrLf)
        save.Close()
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.01.2014, 19:31
Ответы с готовыми решениями:

Как вызвать MessageBox с кнопками "Да" - "Нет" и обработать их нажатие
Срочно нужна помощ. Задача 1 создать програму перевда температур йз фарэенгейт в cелсий 2 прй...

Просмотр картинок из папки в PictureBox кнопками "Вперед" и "Назад"
Здравствуйте! Такая задачка: На форме есть пикчерсбокс и три кнопки. Нажав на одну кнопку...

Обработка "null" в MS Access "Приведение типа "|DBNull" к типу "String" является недопустимым"
Здравствуйте. Работаю с базой MS Access Вывожу в DataGridView таблицу Проблема следующая, если у...

Поиск в DGW вылетает с ошибкой "Приведение типа "|DBNull" к типу "String" является недопустимым."
В общем такой вопрос. Код рабочий. Только у меня не работает. For i = 0 To...

17
1232 / 1042 / 293
Регистрация: 07.03.2012
Сообщений: 3,245
04.01.2014, 19:37 2
MsgBox это функция, которая возвращает там что-то (MsgBoxResultEnum по-моему). Вам надо проверить его
VB.NET
1
ElseIf MsgBox("Вы действительно хотите выйти не сохранив результаты?", MsgBoxStyle.YesNoCancel)= Then
равно подставьте как у меня, студия по идее вам должна предложить верный вариант автокомплитом
1
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 102
04.01.2014, 19:48  [ТС] 3
спасибо большое)
0
200 / 216 / 87
Регистрация: 21.04.2013
Сообщений: 404
04.01.2014, 21:26 4
Цитата Сообщение от ttt_xx Посмотреть сообщение
Пишу игрушку и не могу понять, как задать функции для кнопок которые открываются в MsgBox.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
        Dim dr As DialogResult = MsgBox("Вопрос", _
                                        MsgBoxStyle.YesNoCancel Or MsgBoxStyle.Question, _
                                        "Заголовок")
 
        Select Case dr
            Case DialogResult.Yes
 
            Case DialogResult.No
 
            Case DialogResult.Cancel
 
        End Select
Цитата Сообщение от ttt_xx Посмотреть сообщение
третью кнопку необходимо переименовать в "Сохранить и выйти"
Такой возможности, по-моему, нет. Можно создать свою форму с тремя кнопками. Открывать ее CustomMsgBox.
ShowDialog(). Для получения значений в коде кнопок своей диалоговой формы писать что-то типа:
VB.NET
1
2
DialogResult = vbOK
        Me.Close()
0
637 / 591 / 90
Регистрация: 19.03.2012
Сообщений: 1,123
04.01.2014, 21:41 5
VB.NET
1
2
3
4
5
6
Dim mess = MsgBox("Текст", 32 + 4, "Заголовок") 'значения цифр прилагаю
If mess = DialogResult.Yes then
  'code
Else
  'code
End if
Цитата Сообщение от Petr_S Посмотреть сообщение
Такой возможности, по-моему, нет.
Да, я тоже о такой не слышал...

P.S.: Изображение предоставлено пользователем emenem97.
2
Миниатюры
Использование MsgBox с кнопками "Да" и "Нет"  
Эксперт .NET
5309 / 4105 / 1183
Регистрация: 12.10.2013
Сообщений: 11,909
Записей в блоге: 2
04.01.2014, 22:33 6
Я думаю, если есть надобность в собственном мессадже, то можно вот так сделать.
Основная форма:
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
Public Class Form1
 
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim MyMsg As New MyMsgBox
        With MyMsg
            .FormBorderStyle = Windows.Forms.FormBorderStyle.FixedSingle
            .MaximizeBox = False
            .MinimizeBox = False
            .Button1.Text = "Yes"
            .Button2.Text = "No"
            .Button3.Text = "Save"
        End With
        MyMsg.ShowDialog()
        If MyMsg.Click_Data = 1 Then
            'Вариант 1
            MsgBox("Вариант действий 1")
        ElseIf MyMsg.Click_Data = 2 Then
            'Вариант 2
            MsgBox("Вариант действий 2")
        Else
            'Вариант 3
            MsgBox("Вариант действий 3")
        End If
    End Sub
End Class
Форма для своего мессаджа:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Public Class MyMsgBox
    Private MsgRes As String = Nothing
    Private Sub All_Click(sender As Object, e As System.EventArgs) Handles Button1.Click,
                                                                           Button2.Click, Button3.Click
        MsgRes = CType(sender, Button).Name
        Me.Close()
    End Sub
    Public ReadOnly Property Click_Data() As Integer
        Get
            If MsgRes = "Button1" Then
                Return 1
            ElseIf MsgRes = "Button2" Then
                Return 2
            Else
                Return 3
            End If
        End Get
    End Property
End Class
По возвращаемому свойству из формы мессаджа и прописывайте необходимые действия.
1
200 / 216 / 87
Регистрация: 21.04.2013
Сообщений: 404
04.01.2014, 23:02 7
Цитата Сообщение от Nachrichter Посмотреть сообщение
VB.NET
1
Dim mess = MsgBox("Текст", 32 + 4, "Заголовок") 'значения цифр прилагаю
Вместо "32 + 4" и других сочетаний удобнее писать vb-константы с Or.
Например, vbOKCancel Or vbExclamation выдаст запрос с двумя кнопками ("ОК" и "Отмена") и значком "Восклицательный знак в желтом треугольнике".
1
637 / 591 / 90
Регистрация: 19.03.2012
Сообщений: 1,123
04.01.2014, 23:24 8
Цитата Сообщение от Petr_S Посмотреть сообщение
удобнее писать vb-константы с Or
О вкусах предпочитаю не спорить.
0
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 102
05.01.2014, 08:04  [ТС] 9
Спасибр всем за помощь, сделал вот таким образом. Но тут есть вопрос: когда я нажимаю на кнопку "Нет" прога записывает результат, но не закрывается, и тут же снова вылетает такой же msgbox и тут при повторном нажатии кнопки "Нет" снова все записывается и прога закрывается, а должно закрываться после первого нажатия. И при нажатии кнопки отмена тоже самое, должна закрываться с первого клика, а не со второго, что тут не так?
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        If l > 0 Then
            End
        ElseIf MsgBox("Вы действительно хотите выйти не сохранив результаты?", MsgBoxStyle.YesNoCancel, "Выход") = MsgBoxResult.Yes Then
            End
        ElseIf MsgBox("Вы действительно хотите выйти не сохранив результаты?", MsgBoxStyle.YesNoCancel, "Выход") = MsgBoxResult.No Then
            l = l + 1
            Dim result As StreamWriter
            Dim save As New System.IO.StreamWriter("D:\1.txt", True)
            save.Write(imya)
            save.Write(" ")
            save.Write(cash & vbCrLf)
            save.Close()
            End
        Else : Exit Sub
        End If
    End Sub
0
Заблокирован
05.01.2014, 11:31 10
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 If l > 0 Then
            End
        Else
            Dim MessageB As DialogResult = MessageBox.Show("Вы действительно хотите выйти не сохранив результаты?", "Выход", MessageBoxButtons.YesNoCancel)
            If MessageB = DialogResult.Yes Then End
            If MessageB = DialogResult.No Then
                l = l + 1
                Dim result As StreamWriter
                Dim save As New System.IO.StreamWriter("D:\1.txt", True)
                save.Write(imya)
                save.Write(" ")
                save.Write(cash & vbCrLf)
                save.Close()
                End
            End If
            If MessageB = DialogResult.Cancel Then Exit Sub
        End If
Добавлено через 2 минуты
Цитата Сообщение от ttt_xx Посмотреть сообщение
И при нажатии кнопки отмена тоже самое, должна закрываться с первого клика, а не со второго, что тут не так?
ну так ты погляди на код внимательней. у тебя
Цитата Сообщение от ttt_xx Посмотреть сообщение
ElseIf MsgBox("Вы действительно хотите выйти не сохранив результаты?", MsgBoxStyle.YesNoCancel, "Выход") = MsgBoxResult.Yes Then
и
Цитата Сообщение от ttt_xx Посмотреть сообщение
ElseIf MsgBox("Вы действительно хотите выйти не сохранив результаты?", MsgBoxStyle.YesNoCancel, "Выход") = MsgBoxResult.No Then
0
1 / 1 / 0
Регистрация: 28.01.2013
Сообщений: 102
05.01.2014, 12:16  [ТС] 11
Цитата Сообщение от Release Посмотреть сообщение
ну так ты погляди на код внимательней
а что тут не так? вроде все правильно.
Идет проверка какая кнопка была нажата
0
Эксперт .NET
5309 / 4105 / 1183
Регистрация: 12.10.2013
Сообщений: 11,909
Записей в блоге: 2
05.01.2014, 12:34 12
А чем Вам вариант с двумя формами не подошел? Названия кнопок ставьте какие надо, и все работает как и требовалось...
0
Заблокирован
05.01.2014, 12:53 13
Цитата Сообщение от ttt_xx Посмотреть сообщение
Идет проверка какая кнопка была нажата
дак перед проверкой она вызывает MsgBox. По этому у вас два раза показывается сообщение.
0
829 / 637 / 100
Регистрация: 20.08.2013
Сообщений: 2,524
09.01.2014, 15:07 14
Цитата Сообщение от ttt_xx Посмотреть сообщение
и третью кнопку необходимо переименовать в "Сохранить и выйти"
Надо копать в сторону WinApi и нативного показа диалога. Примерно туда же, где присобачивается таймер обратного отсчёта. По крайней мере, мне так кажется. Не пробовал так делать.
Кстати, а с шириной кнопок тогда что?
0
Заблокирован
09.01.2014, 15:32 15
Цитата Сообщение от Qwertiy Посмотреть сообщение
Надо копать в сторону WinApi и нативного показа диалога. Примерно туда же, где присобачивается таймер обратного отсчёта.
Мудрено больно, проще уж свой сделать.
0
829 / 637 / 100
Регистрация: 20.08.2013
Сообщений: 2,524
09.01.2014, 15:40 16
Цитата Сообщение от Release Посмотреть сообщение
Мудрено больно, проще уж свой сделать.
Мне кажется, проще оставить кнопку Отмена с естественной функциональностью
0
176 / 151 / 10
Регистрация: 08.11.2012
Сообщений: 224
09.01.2014, 17:51 17
Цитата Сообщение от ttt_xx Посмотреть сообщение
третью кнопку необходимо переименовать в "Сохранить и выйти"
VDialog по всем вопросам.
0
1300 / 506 / 63
Регистрация: 09.08.2012
Сообщений: 2,056
09.01.2014, 18:12 18
а я бы сделал ДВА msgbox'а. первый стандартный: "выйти? да/нет. Второй после нажатия Да (Выход) выскакивает предложение msgbox: "Сохранить? Да/Нет" . И не нужно ничего городить
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2014, 18:12

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Ошибка "Приведение строки "explorer.exe" к типу "Double" является недопустимым" при записи в реестр
Помогите, хочу получить доступ к winlogon, что бы изменять любое другое значение shell на...

Ошибка при запуске .exe файла из debug: "Приведение строки "Июнь" к типу "Double" является недопустимым"
Если запускать из самого проекта(F5), то все нормально, а если скомпилированный запустить, то...

Оператор "+" для типов "String" и "System.Windows.Forms.ComboBox.ObjectCollection" не определен
Доброго времени суток,подскажите решение проблемы К комбобоксам привязал БД отображаются в них...

Как исправить ошибку "Приведение строки "" к типу "Double" является недопустимым"?
Выдает ошибку в строке nasel(n).mat = Int(line(2)). Приведение строки "" к типу "Double" является...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.