Проблемы с Label control
На эту Label присутствуют две обработки события - на одиночный и на двойной клик по надписи. Причем обработка одиночного клика - пустышка типа Sub - End Sub. Обработка двойного клика чуть по сложнее.
Проблема в том, что при одиночном клике свойство Transparent теряется напрочь и вместо любимой надписи я вижу тока прямоугольник заданного цвета, причем эта "картинка" никак не сбрасывается, кроме варианта с ручной работой посредством конструктора Control-ов.
Как с этим бороться?
Что с лэйблом? Вопрос поставлен неясно.
Label используется для вызова обработки, например сортировки или фильтрации листа таблицы по содержимому той или иной колонки.
Колонки имеют разную ширину, при этом в заголовках узких колонок
текст повернут на бок. В Label такой фокус невозможен. Поэтому я накладываю эту Label на заголовок колонки, устанавливаю в ём
Caption = "."
AutoSize = False
Forecolor = Backcolor
BackStyle = Transparent (прозрачный то бишь)
Вставляю две обработки:
Sub Label1_Clicl()
' Тут ничего не выполняется. И нужна она только для того чтобы
' незаметной была реакция Label-а, когда мыша на него ставится (IMHO)
End Sub
и
Sub Label1_DblClick(ByVal lR As MsForm....)
' запуск нужной обработки должен выполняться по двойному клику
' на Label-е (в нашем случае "заголовке колонки")
...
End Sub
Вроде все прекрасно, НО! когда кликаю по Label-у один раз, изначально видимый текст заголовка закрывается прямоугольником цвета ForeColor.
И никакими силами восстановить отображение текста заголовка не удается, кроме как через ручной вызов конструктора элементов управления... А на двойной клик все работает как нада!
В обсчем не аккуратненько как-то, и как с этим бороться не знаю.
Так код покажите?! А что в функциях? Если ничего, то зачем они? Все равно после компиляции и не будет.
Впрочем, даже если полностью закомментировать эту функцию, реакция Label-а не меняется. То есть прямоугольник все равно закрывает текст заголовка, я ее пока оставил, чтобы было куда вносить код, который бы
блокировал забивание заголовка (по сути - восстанавливал изображение заголовка). Просто может быть есть другие способы
борьбы с этим эффектом, что называется на уровне недокументированных возможностей объекта Label...
Что касается процедуры Label1_DblClick(ByVal lMode As Boolean), то она как раз работает нормально. Если так уж нужен код, пожалуйста, не жалко (я там устанавливаю некий фильтр по столбцу):
Dim xf As Variant
CheckFilterMode ' здесь проверяется активность автофильтра
' и при необходимости автофильтр активизируется
xf = Trim(InputBox("Введите трехзначный код" + vbCr + _
"подразделения-получателя", cFc))
' cFc - Public переменная, определяет заголовок окна сообщения
If Len(xf) > 0 Then
If Len(xf) < 3 Then
xf = xf + "*"
Else
xf = Left(xf, 3)
End If
Selection.AutoFilter Field:=1, Criteria1:="<>", _
Operator:=xlOr, Criteria2:=xf
Worksheets(1).Label2.ForeColor = vbBlue ' подкрашиваем заголовок
' чтобы видеть по какому из
' них установлен фильтр
Else
Selection.AutoFilter Field:=1
Worksheets(1).Label2.ForeColor = vbBlack
End If
Range("C12").Select
Protect Password:="01", AllowFiltering:=True
End Sub
Private Sub CheckFilterMode()
' Контроль активации автофильтра
Unprotect Password:="01"
If AutoFilterMode = False Then
Range("C12:L12").Select
Selection.AutoFilter
End If
End Sub