Скрыть колонку программно в MS-Access - PullRequest
3 голосов
/ 14 ноября 2009

Я хочу скрыть или показать столбец на основе переменных данных из выбора пользователя. Как установить скрытый столбец в MS-Access 2003?

Например,

После события смены пользователя ...

For Each ctl In Me.FormNameHere.Form.Controls
    If (TypeName(ctl) = "Textbox") Then
        If InStr(GetTextList(), ctl.Name) > 0 Then
            ctl.hidden = True
        Else
            ctl.hidden = False
        End If
    End If
Next ctl
  • Каков наилучший подход к этому типу задач?
  • Есть ли более очевидное решение?

Ответы [ 4 ]

5 голосов
/ 15 ноября 2009

Элементы управления не имеют «скрытого» свойства (никакие объекты в Access не имеют скрытого свойства). У них есть свойство .Visible.

Для дальнейшего использования я предлагаю вам ознакомиться с обозревателем объектов в VBE - откройте VBE и нажмите F2. Затем вы можете ограничить свой поиск отдельными библиотеками, используемыми в вашем проекте. Тем не менее, до момента, когда вы понимаете объектную модель, требуется некоторое время.

Кроме того, вы можете рассчитывать на Intellisense для изучения свойств / методов объекта, поэтому в коде формы, с которой вы работаете, вы можете ввести «Me.MyTextBox». и раскрывающийся список Intellisense покажет вам все свойства и методы этого конкретного элемента управления. Он не работает для универсальной управляющей переменной (как в вашем коде), потому что разные типы элементов управления имеют разные свойства.

И, конечно, на листе свойств приведены названия свойств, хотя в коде они не всегда используют одну и ту же орфографию (обычно они одинаковы с удаленными пробелами).

Кроме того, существуют различия в том, как вы можете это сделать, в зависимости от того, является ли это обычной формой или таблицей данных. В таблице данных ваши элементы управления также имеют свойства .ColumnHidden и .ColumnWidth (установка параметров в любом представлении, кроме представления таблицы, не оказывает влияния, и ни одно из этих свойств не доступно в стандартном листе свойств, но изменения в них сохраняются при сохранении форма).

5 голосов
/ 14 ноября 2009

Я ответил на похожий вопрос на этот вопрос недавно, чтобы скрыть столбцы таблицы данных. Однако вы, похоже, хотите скрыть текстовые поля, расположенные в столбце на форме, это правильно?

Перебор всех элементов управления в форме может быть медленным, если у вас много элементов управления. Если вам действительно нужно использовать подобные текстовые поля, то вы можете попробовать сгруппировать «столбцы» вместе, а затем скрыть группы. Другой подход заключается в использовании списка или таблицы данных для представления данных, где вы можете напрямую изменять расположение столбцов.

3 голосов
/ 17 ноября 2009

Я обнаружил, что свойство ColumnHidden делает свое дело.

For Each ctl In Me.FormNameHere.Form.Controls
    If (TypeName(ctl) = "Textbox") Then
        If InStr(GetTextList(), ctl.Name) > 0 Then
            ctl.Columnhidden = True
        Else
            ctl.Columnhidden = False
        End If
    End If
Next ctl

Я получил подсказку от этого связанного вопроса.

2 голосов
/ 10 августа 2013

Однострочный подход использует:

forms(fname).Controls(ctrlname).columnhidden = false

, где fname это имя вашей формы ctrlname - это имя вашего элемента управления

...