Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: как сделать "недоступными" контролы прил Добавлено: 19.11.09 13:05  

Автор вопроса:  msd
Есть форма с множеством контролов, необходимо на форме поместить чекбокс, чтобы он работал так, чтобы нажав на него сделать все контролы формы недоступными, а "расчекав" - вернуть их в нормальное рабочее состояние, типа заморозить/разморозить приложение для управления пользователем.
Есть ли способы, кроме как вручную по всем кодам делать вставки для проверки состояния этого чекбокса? Эффект должен быть примерно таким, как если бы появлялся модальный диалог над приложением.
Способ с установкой для всех контролов свойства Enabled = false не годится, в этом случае изменится внешний вид контролов. Надо чтобы приложение вело себя так, как в случае когда появляются песочные часы, и приложение ни на что не реагирует, а его внешний вид не меняется.

Ответить

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

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



Вопросов: 4
Ответов: 8
 Профиль | | #1 Добавлено: 19.11.09 13:06
Да, забыл сказать, что это все для VB6

Ответить

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



ICQ: 9968842 

Вопросов: 40
Ответов: 337
 Web-сайт: vkontakte.ru/id25563295 добавляйтесь в друзья))
 Профиль | | #2
Добавлено: 19.11.09 15:59
Sleep

Ответить

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



Вопросов: 4
Ответов: 8
 Профиль | | #3 Добавлено: 19.11.09 16:09
не понял, что это значит?

Ответить

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



ICQ: 9968842 

Вопросов: 40
Ответов: 337
 Web-сайт: vkontakte.ru/id25563295 добавляйтесь в друзья))
 Профиль | | #4
Добавлено: 19.11.09 16:37
API:
  1.  
  2. Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  3. Sleep(Время торможения в милисекундах)

Ответить

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



ICQ: 9968842 

Вопросов: 40
Ответов: 337
 Web-сайт: vkontakte.ru/id25563295 добавляйтесь в друзья))
 Профиль | | #5
Добавлено: 19.11.09 16:40
Если API обьявляешь не в модуле, то не Public, а Private.

Ответить

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



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #6
Добавлено: 19.11.09 19:57
Элементарно: помещаешь все контролы в элемент Frame (borderstyle=0, enabled=false)

Ответить

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



Вопросов: 4
Ответов: 8
 Профиль | | #7 Добавлено: 19.11.09 20:44
да спасибо

Ответить

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



ICQ: 629966 

Вопросов: 118
Ответов: 903
 Web-сайт: www.aliyev.us
 Профиль | | #8
Добавлено: 20.11.09 09:23
Зачем ты не сделаешь
  1. Me.Enabled = False

а потом обратно
  1. Me.Enabled = True

Ответить

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



Вопросов: 4
Ответов: 8
 Профиль | | #9 Добавлено: 20.11.09 12:28
правильное решение было с панелькой, а если дезактивировать всю форму, то не будет возможности вернуть ее обратно в нормальное состояние, ведь контрол который это делает (чек бокс например) находится на этой же форме и он будет недоступен.

Ответить

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



ICQ: 629966 

Вопросов: 118
Ответов: 903
 Web-сайт: www.aliyev.us
 Профиль | | #10
Добавлено: 20.11.09 13:34
Тогда тебе нужно перебрать все контроли кроме чекс-бокса.
Используй For Each

Ответить

Номер ответа: 11
Автор ответа:
 Millenium



ICQ: 629966 

Вопросов: 118
Ответов: 903
 Web-сайт: www.aliyev.us
 Профиль | | #11
Добавлено: 20.11.09 13:43
  1. Public fMainForm As frmMain
  2. Sub Main()
  3.     Set fMainForm = New frmMain
  4.     fMainForm.Show
  5. End Sub
  6. Sub LoadResStrings(frm As Form)
  7.     On Error Resume Next
  8.     Dim ctl As Control
  9.     Dim obj As Object
  10.     Dim fnt As Object
  11.     Dim sCtlType As String
  12.     Dim nVal As Integer
  13.     'set the form's caption
  14.     frm.Caption = LoadResString(CInt(frm.Tag))
  15.     'set the font
  16.     Set fnt = frm.Font
  17.     fnt.Name = LoadResString(20)
  18.     fnt.Size = CInt(LoadResString(21))
  19.     'set the controls' captions using the caption
  20.     'property for menu items and the Tag property
  21.     'for all other controls
  22.     For Each ctl In frm.Controls
  23.         Set ctl.Font = fnt
  24.         sCtlType = TypeName(ctl)
  25.         If sCtlType = "Label" Then
  26.             ctl.Caption = LoadResString(CInt(ctl.Tag))
  27.         ElseIf sCtlType = "Menu" Then
  28.             ctl.Caption = LoadResString(CInt(ctl.Caption))
  29.         ElseIf sCtlType = "TabStrip" Then
  30.             For Each obj In ctl.Tabs
  31.                 obj.Caption = LoadResString(CInt(obj.Tag))
  32.                 obj.ToolTipText = LoadResString(CInt(obj.ToolTipText))
  33.             Next
  34.         ElseIf sCtlType = "Toolbar" Then
  35.             For Each obj In ctl.Buttons
  36.                 obj.ToolTipText = LoadResString(CInt(obj.ToolTipText))
  37.             Next
  38.         ElseIf sCtlType = "ListView" Then
  39.             For Each obj In ctl.ColumnHeaders
  40.                 obj.Text = LoadResString(CInt(obj.Tag))
  41.             Next
  42.         Else
  43.             nVal = 0
  44.             nVal = Val(ctl.Tag)
  45.             If nVal > 0 Then ctl.Caption = LoadResString(nVal)
  46.             nVal = 0
  47.             nVal = Val(ctl.ToolTipText)
  48.             If nVal > 0 Then ctl.ToolTipText = LoadResString(nVal)
  49.         End If
  50.     Next
  51. End Sub

Вот тебе пример! Тут перебирает все контроли и присваивает им тексты/Кепшены. А ты просто перебирай контроли и отключай их :)

Ответить

Номер ответа: 12
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #12 Добавлено: 20.11.09 22:45
Оба варианта хороши каждый для своего случая.
Если нужно выключить контролы и чтоб это было очевидно, то лучше их перебрать и выключить.
А чтоб контролы заблочились, но выглядели как включенные нужно использовать трюк с фрэймом, тоже перебрать контролы и выставить контейнером выключенный и растянутый на всю форму фрэйм.

Ответить

Страница: 1 |

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



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