2011-01-20 8 views
0

メインウィンドウを持つアプリケーションを実装しています。この第2ウィンドウには、タブコントロールのタブがたくさんあります。タブのコントロールを検証するwinforms

各タブでは、ユーザが編集できる値がたくさんあります。その中にはいくつかの値を設定する必要があり、xとyの間に値を設定する必要があります。

メインウィンドウには保存ボタンがあります。ポイントは、いずれかのタブコントロールで有効性が確認されていない場合、保存は不可能であり、適切なタブを開いて検証を表示することです。このような仕組みを作る方法のアドバイスを教えてください。たぶん任意の一般的なメソッド?ヘルプ

答えて

1

ため

おかげで

WinForms TabControl validation: Switch to a tab where validation failed

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; 
     } 
    } 
このリンクをお試しください
関連する問題