проверка элементов управления во вкладках winforms - PullRequest
0 голосов
/ 21 января 2011

Я реализую приложение, у которого есть главное окно, а во втором - много вкладок в tabcontrol.

На каждой вкладке у меня много контроля над тем, какие значения могут редактировать пользователи, некоторые из них должны быть заполнены, некоторые должны иметь значения между x и y и так далее.

В главном окне есть кнопка сохранения. Дело в том, что если в какой-либо вкладке элемент управления не проверен, сохранение не должно быть возможным, и должна быть открыта соответствующая вкладка и показана проверка. Не могли бы вы дать мне совет, как создать такой механизм? Может быть, какие-нибудь общие методы?

спасибо за помощь

1 Ответ

1 голос
/ 21 января 2011

Попробуйте эту ссылку

Проверка WinForms TabControl: переход на вкладку, где проверка не удалась

Dictionary<TabPage, HashSet<Control>> _tabControls 
                           = new Dictionary<TabPage, HashSet<Control>>();

    public OptionsForm()
    {   
        InitializeComponent();
        RegisterToValidationEvents();
    }

    private void RegisterToValidationEvents()
    {
        foreach (TabPage tab in this.OptionTabs.TabPages)
        {
            var tabControlList = new HashSet<Control>();
            _tabControls[tab] = tabControlList;
            foreach (Control control in tab.Controls)
            {
                var capturedControl = control; //this is necessary
                control.Validating += (sender, e) =>
                    tabControlList.Add(capturedControl);
                control.Validated += (sender, e) =>
                    tabControlList.Remove(capturedControl);
            }
        }
    }

    private void Ok_Button_Click(object sender, EventArgs e)
    {
        if (this.ValidateChildren())
        {
            _settings.Save();
            this.Close();
        }
        else
        {
            var unvalidatedTabs = _tabControls.Where(kvp => kvp.Value.Count != 0)
                                              .Select(kvp => kvp.Key);
            TabPage firstUnvalidated = unvalidatedTabs.FirstOrDefault();
            if (firstUnvalidated != null && 
                !unvalidatedTabs.Contains(OptionTabs.SelectedTab))
                    OptionTabs.SelectedTab = firstUnvalidated;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...