Страница 1 из 1
Динамическое изменение элементов. События.
Добавлено: 10 мар 2016, 17:31
MaximRu
Здравствуйте.
По задаче нужно скрывать некоторые поля в отчете (в зависимости от bool переменной). Проблема в том, что если скрывать эти поля через "Условие", то вместо них остается пустое место. Т.е. оставшиеся поля нужно сдвинуть выше. Пробовал добавить код в события "Перед печатью", но код не срабатывает. Часть отчета прилагаю во вложении. Что неправильно в коде? Или может можно сдвигать поля динамически другим способом?
---
GroupBand - пробовали, не подходит. Код события в элементе Text16.
Re: Динамическое изменение элементов. События.
Добавлено: 11 мар 2016, 15:20
HighAley
Здравствуйте.
Обычно в таких случая мы рекомендует добавить Панель с включенным свойством Can Shrink.
На неё класть компоненты, которые могут скрываться по условию. Если их нет, то панель будет уменьшаться и все компоненты ниже будут тоже сдвигаться.
Спасибо.
Re: Динамическое изменение элементов. События.
Добавлено: 15 мар 2016, 08:17
MaximRu
Здравствуйте.
Даже при добавлении элементов в две разные панели, при скрытии 1-ой панели, все равно остается пустое место. Может это быть связанно с тем, что панели находятся в DataBand? У DataBand также стоит свойство Can Shrink.
Re: Динамическое изменение элементов. События.
Добавлено: 15 мар 2016, 12:07
Леонид
Добрый день!
Могу предложить немного другой вариант решения, без CanShrink.
1) Создаём 3 панели;
2) На Panel1 кладём верхние контролы, на Panel2 только текст (SubTest), и на Panel3 оставшиеся;
3) Устанавливаем свойство DockStyle у всех трёх панелей в Top;
4) В событии BeforePrint компонента DataBand пишем для теста такой код:[/list]
Код: Выделить всё
if (true) // if (!RoleDataModel.IsPrintSubSystemName)
{
Text2.Height = 0;
Panel2.Height = 0;
}
Что это даст? Как раз то, что вы и хотели, по условию будет скрываться средняя (Panel2) и контролы так же нужно скрывать, а нужны эти панельки для того, чтобы они шли друг за другом, используя DockStyle == Top.
Рабочий пример во вложении.
P.S. Забыл сказать. Можно так же в том же событии BeforePrint добавить "раскраску" текста, а Conditions убрать.
То есть, в вашем случае это будет так:
Код: Выделить всё
if (!RoleDataModel.IsPrintSubSystemName)
{
Stimulsoft.Base.Drawing.StiSolidBrush textBrush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Red);
Text30.TextBrush = textBrush;
Text47.TextBrush = textBrush;
Text31.TextBrush = textBrush;
... // перечислить остальные контролы
Text99.TextBrush = textBrush;
}
Re: Динамическое изменение элементов. События.
Добавлено: 15 мар 2016, 15:34
HighAley
Здравствуйте.
Надо скрывать не сами панели, а их содержимое, тогда панели изменят свою высоту и всё остальное содержимое сдвинется.
Расположение компонентов изменяется, если изменяется высота других компонентов в ту или иную сторону, но не тогда, когда они скрываются по условию.
Спасибо.
Re: Динамическое изменение элементов. События.
Добавлено: 15 мар 2016, 16:57
Леонид
Надо скрывать не сами панели, а их содержимое, тогда панели изменят свою высоту и всё остальное содержимое сдвинется.
Согласен, можно и так, в этом случае, можно установить флажок CanShrink у Panel2, а в коде писать:
Код: Выделить всё
if (true) // if (!RoleDataModel.IsPrintSubSystemName)
{
Text2.Height = 0;
}
То есть, в этом случае строка
не нужна.
Re: Динамическое изменение элементов. События.
Добавлено: 16 мар 2016, 09:10
HighAley
Здравствуйте.
Не надо никакого дополнительного кода, я забыл один важный момент.
Свойство
Shift Mode панели, которая должна подниматься, должно быть установлено в значение
Increasing Size, Decreasing Size
Спасибо.