Как установить маску редактирования, где ноль означает 0, а не любое другое число? - PullRequest
1 голос
/ 29 мая 2019

Ситуация : Символ 0 имеет особое значение в числовых форматах отображения.Мой код выбирает дату при определенных условиях и отображает формат для другого поля редактирования (столбец в DW), например 1905 , где 19 - это последние 2 цифры текущего года и 05 это текущий месяц + "-" + "####", поэтому окончательный формат отображения, который я хочу установить, будет выглядеть следующим образом: 1905 - #### .

Проблема : Ноль в 1905 отображается в целевом поле редактирования (столбце) как 19 5 .В месте, где находится 0 , указано место.Окончательный результат маски редактирования 1905 - #### отображается в поле редактирования как 1 9 5- и точки курсора точно после цифры 9 , которую я не делаюхочу.

Ожидается : я хочу иметь формат отображения «1905-» и указатель курсора клавиатуры после тире «-» для ввода оставшихся 4 цифр.

Вопрос : Как установить формат отображения чисел или отредактировать маску, чтобы игнорировать специальное значение 0 и принять 0 в качестве цифры ноль, а не любого другого числа?

Например, вот как я устанавливаю маску для столбца Trans_ID, который является столбцом строкового типа.

dw_1.Object.Trans_ID.EditMask.Mask = Right(String(Date(dw_1.Object.DOB[1]), "YYYY"),2) +  String(Date(dw_1.Object.DOB[1]), "MM") + "-####"

PowerBuilder v12.5

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Справка PB не помогает в этом вопросе, но appeon ответил на этот вопрос.

Реальная задача состоит в том, чтобы установить эту маску редактирования 1905 - #### в столбец.

Нет проблем, и ее можно легко установить, как мы устанавливаем другие маски,Но когда мы вводим данные в столбец, вместо 0 между 9 и 5 будет пробел.

Желаемый результат - статический ноль вместо пробела.Поэтому, чтобы заставить его работать таким образом, мы снова устанавливаем ту же маску в режиме конструктора, но с разницей в ~ знак, подобный этому 19 ~ 05 - #### .

Это будет работать так, как мы хотим.Это означает, что пробел не будет отображаться и будет отображаться 0 , и пользователь не сможет изменить 1905 .

Год 1905 это не фиксированный год, он будет продолжать меняться, потому что это зависит от DOB , поэтому мы должны установить ту же маску 19 ~ 05 - #### в сценарии

String TheMask
TheMask = Right(String(Date(dw_1.Object.DOB[1]), "YYYY"),2) 
IF Left(String(Date(dw_1.Object.DOB[1]), "MM"),1) = "0" THEN 
    TheMask += "~~~~0"
ELSE
    TheMask += Left(String(Date(dw_1.Object.DOB[1]), "MM"),1)
END IF
TheMask += Right(String(Date(dw_1.Object.DOB[1]), "MM"),1) + "-######"
dw_1.Object.Trans_ID.EditMask.Mask = TheMask

Все в приведенном выше коде очень просто, но одна вещь, которая заставила меня задать этот вопрос и потратила много часов, чтобы выяснить, как установить маску, это знак ~ , который должен повторяться 4 время вместо 2 раз.

Если мы попытаемся установить маску с одиночными ~ или менее чем четырьмя ~ знаками, то приложение будет аварийно завершено.

0 голосов
/ 29 мая 2019

Попробуйте

string(month(today()), '00')

или, для всей строки

Right(String(Date(dw_1.Object.DOB[1]), "YYYY"),2) +  String(month(Date(dw_1.Object.DOB[1]), "00") + "-####"
...