Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Сворачивать в трей при нажатии на крестик Добавлено: 14.03.10 20:54  

Автор вопроса:  Svarge
Подскажите как сделать (или где найти) чтоб при закрытии формы на "крестик" она сворачивалась в трей, а при клике по иконке в трее разворачивалась (закрытие будет по кнопке в меню)
vb.net(2008)

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 UnDeAdZak



Вопросов: 80
Ответов: 476
 Профиль | | #1 Добавлено: 15.03.10 07:40
Всё просто:
На событие Form.Closed()(или Form.Closing, я не помню, а проверять счас времени нету) ставиш появление контрола (NotifyIcon1.Visible = True) (предварительно добавив его на форму ,и установив это свойство в False).

Ответить

Номер ответа: 2
Автор ответа:
 Svarge



Вопросов: 4
Ответов: 14
 Профиль | | #2 Добавлено: 15.03.10 20:51
Спасибо, получилось! (по Closing).
Все окзалось не так сложно, даже контекстное меню к иконке сделал чисто интуитивно.
Подскажите, как отследить что по иконке щелкнули левой кнопкой, а не правой?
Дело в том что при щелчке правой кнопкой по иконке надо чтоб открывалось контекстное меню, а по щелчку левой менялось свойство видимости формы. Контекстное меню привязалось к правой кнопке само, но если поставить изменение видимости на событие "клик", то видимость меняется и при вызове контекстного меню правой кнопкой....

Ответить

Номер ответа: 3
Автор ответа:
 iprog



Вопросов: 26
Ответов: 110
 Web-сайт: usprogs.atheo-club.ru
 Профиль | | #3
Добавлено: 15.03.10 21:22
По-моему, в процедуре Mouse_Down можно определить, какая кнопка нажата.
  1. If Button = 1 Then NotifyIcon1.Visible = True

Правда, это точно работает в VB 6.0, но в Visual Studio я этим не пользовался, поэтому там могут быть другие переменные и значения.

Ответить

Номер ответа: 4
Автор ответа:
 Svarge



Вопросов: 4
Ответов: 14
 Профиль | | #4 Добавлено: 15.03.10 21:47
Да, про мышь так и есть ), благодарю.
Код, если кому интересно:
If Button.MouseButtons = Windows.Forms.MouseButtons.None Then Me.Visible = Not Me.Visible

Странно что пришлось поставить Windows.Forms.MouseButtons.None, а не Windows.Forms.MouseButtons.Left... странно потому что если ставить right или middle, то на правую кнопку и на среднюю все работает, а на левую нет, методом тыка заработало на none.

Ответить

Номер ответа: 5
Автор ответа:
 Svarge



Вопросов: 4
Ответов: 14
 Профиль | | #5 Добавлено: 15.03.10 22:09
Рано обрадовался с Closing, при нажатии на крестик все равно форма закрывается, надо же еще кроме отображения иконки добавить код отмены закрытия?.... Как сделать чтоб не закрывалась программа?
И еще подскажите событие при сворачивании и разворачивании формы (черточка и квадратик рядом с крестиком).

Ответить

Номер ответа: 6
Автор ответа:
 UnDeAdZak



Вопросов: 80
Ответов: 476
 Профиль | | #6 Добавлено: 15.03.10 23:40
По идее
    Private Sub Form1_MaximumSizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MaximumSizeChanged

    End Sub

    Private Sub Form1_MinimumSizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MinimumSizeChanged
но я не пробовал

Ответить

Номер ответа: 7
Автор ответа:
 iprog



Вопросов: 26
Ответов: 110
 Web-сайт: usprogs.atheo-club.ru
 Профиль | | #7
Добавлено: 16.03.10 22:02
Напишите вместо
  1. Form.Closing

  1. Form.Visible = False
.
Это скроет Вашу форму. Для её отбражения надо написать:
  1. Form.Visible = True
.
Но при полном закрытии программы надо выгрузить и эту форму. Проще написать:
  1. End

(это надо написать в процедуре выгрузки последней формы).

Ответить

Номер ответа: 8
Автор ответа:
 iprog



Вопросов: 26
Ответов: 110
 Web-сайт: usprogs.atheo-club.ru
 Профиль | | #8
Добавлено: 16.03.10 22:07
UnDeAdZak: Всё правильно. В Visual Studio 2008 есть и
  1. Private Sub Form1_MaximumSizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MaximumSizeChanged
  2.  
  3. End Sub

, и
  1. Private Sub Form1_MinimumSizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MinimumSizeChanged
  2.  
  3. End Sub

Ответить

Номер ответа: 9
Автор ответа:
 Svarge



Вопросов: 4
Ответов: 14
 Профиль | | #9 Добавлено: 17.03.10 08:16
Ilya
Я это и написал. Но что толку делать Form.Visible = False в событии Form.Closing если сразу после того как форма скрывается она же и выгружается?
а чтоб она не выгружалась надо оказывается перед Visible = False написать e.Cancel = True.
И если кто будет этим пользоваться надо ввести логическую переменную и по ней устанавливать e.Cancel = True иначе форма никогда не выгрузится (никогда не произойдет событие Form.Closing).

Ответить

Номер ответа: 10
Автор ответа:
 iprog



Вопросов: 26
Ответов: 110
 Web-сайт: usprogs.atheo-club.ru
 Профиль | | #10
Добавлено: 17.03.10 21:13
Я сейчас копался в кодах и нашёл вот что:
  1. Private Sub btnTray_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTray.Click
  2. Me.Hide()
  3. NotifyIcon1.Visible = True
  4. NotifyIcon1.Text = "System Information"
  5. End Sub

Правда, это код нажатия кнопки, но всё же его можно вставить в FormClosing. При этом, действительно, надо написать:
  1. e.Cancel = True

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам