Проверка текстового поля, проблема переключения фокуса

Вот один из способов сделать это:

Я сначала построил dict, используя кортеж в качестве составного ключа, а затем составил новый список из этого dict. Вы можете написать понимание для дальнейшего сокращения строк и оптимизации, надеюсь, это поможет.

new_dict = {}

for item in lst:
    try: # if already exists then append to the list
        new_dict.get((item['number'], item['favorite']))
        new_dict[(item['number'], item['favorite'])].append(item['color'])
    except KeyError: # if it doesn't then create a new entry to that key
        new_dict[(item['number'], item['favorite'])] = [item['color']]


final_list = []
for k, v in new_dict.items(): # keep appending dicts to our list
    final_list.append({'number': k[0], 'favorite': k[1], 'color':set(v)})

print(final_list)

Выходы:

[{'number': 1, 'favorite': False, 'color': {'green', 'red'}}, {'number': 1, 'favorite': True, 'color': {'red'}}, {'number': 2, 'favorite': False, 'color': {'red'}}]
6
задан Scott Vercuski 5 December 2012 в 18:27
поделиться

5 ответов

Самый простой путь состоял бы в том, чтобы только поместить всю проверку в обработчик Кнопок отправки, вместо того, чтобы иметь его в средствах управления.

2
ответ дан 8 December 2019 в 02:30
поделиться

Форма имеет свойство AutoValidate, которое может быть установлено позволить изменение фокуса

27
ответ дан 8 December 2019 в 02:30
поделиться

у нас есть функция проверки, которая возвращает bool, если форма допустима и устанавливает всех ошибочных поставщиков на форме:

похож на это:

    private void OnSave()
    {
      if(ValidateData())
      {
        //do save
      }
    }

    public bool ValidateData()
    {
        errorProvider.Clear();
        bool valid = true;
        if (this.defectStatusComboBox.SelectedIndex == -1)
        {
            errorProvider.SetError(defectStatusComboBox, "This is a required feild.");
            valid = false;
        }
        //etc...
        return valid;
     }
2
ответ дан 8 December 2019 в 02:30
поделиться

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

-1
ответ дан 8 December 2019 в 02:30
поделиться

The form property is "AutoValidate" and it affects all controls on the form. It's an enum; set it to System.Windows.Forms.AutoValidate.EnableAllowFocusChange to allow user to exit a control which failed validation, but still show the error icon which allows the user to pull up error tooltip.

The control "CausesValidation" property is a boolean. If it's true then the control raises the validation event which triggers the errorProvider. It it's false, everything gets bypassed, user can exit control, but there's no error icon or tooltip.

6
ответ дан 8 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: