2010-10-28 6 views

Répondre

0

Je suggère de dessiner un rectangle autour du contrôle actif comme suit:

  • je besoin d'une méthode pour obtenir tous les contrôles sous la forme, même qu'ils sont dans le Panneau imbriqué ou GroupBoxe.

La méthode:

// Get all controls that exist in the form. 
public static List<Control> GetAllControls(IList controls) 
{ 
    List<Control> controlsCollectorList = new List<Control>(); 
    foreach (Control control in controls) 
    { 
     controlsCollectorList.Add(control); 
     List<Control> SubControls = GetAllControls(control.Controls); 
     controlsCollectorList.AddRange(SubControls); 
    } 
    return controlsCollectorList; 
} 
  • .. Puis fonctionnalité Dessin ..

Le code:

public Form1() 
{ 
    InitializeComponent(); 

    // The parents that'll draw the borders for their children 
    HashSet<Control> parents = new HashSet<Control>(); 

    // The controls' types that you want to apply the new border on them 
    var controlsThatHaveBorder = new Type[] { typeof(TextBox), typeof(ComboBox) }; 

    foreach (Control item in GetAllControls(Controls)) 
    { 
     // except the control if it's not in controlsThatHaveBorder 
     if (!controlsThatHaveBorder.Contains(item.GetType())) continue; 

     // Redraw the parent when it get or lose the focus 
     item.GotFocus += (s, e) => ((Control)s).Parent.Invalidate(); 
     item.LostFocus += (s, e) => ((Control)s).Parent.Invalidate(); 

     parents.Add(item.Parent); 
    } 

    foreach (var parent in parents) 
    { 
     parent.Paint += (sender, e) => 
     { 
      // Don't draw anything if this is not the parent of the active control 
      if (ActiveControl.Parent != sender) return; 

      // Create the border's bounds 
      var bounds = ActiveControl.Bounds; 
      var activeCountrolBounds = new Rectangle(bounds.X - 1, bounds.Y - 1, bounds.Width + 1, bounds.Height + 1); 

      // Draw the border... 
      ((Control)sender).CreateGraphics().DrawRectangle(Pens.Blue, activeCountrolBounds); 
     }; 
    } 
} 

Bonne chance!

Questions connexes