Поскольку это было возможно, но немного громоздко, я решил использовать функцию 'trace variable' старого стиля для принудительного применения значений в выпадающем списке.
Поставьте следующий оператор после вызова ComboBox:
trace variable myVar w forceAlphaNum
В других местах вы должны определить процесс forceAlphaNum:
proc forceAlphaNum { name el op } {
if { $el == "" } {
set newname $name
set oldname ${name}_alphanum
} else {
set newname ${name}($el)
set oldname ${name}_alphanum($el)
}
global $newname
global $oldname
if { ![info exist $oldname] } {
set $oldname ""
}
# Check if it's alphanum string
if ![regexp {^[a-zA-Z0-9]*$} [set $newname]] {
set $newname [set $oldname]
bell; return
}
set $oldname [set $newname]
}