2010-02-10 57 views
0

我在具有輔助方法的類HUD.cs中有以下方法。下面的方法是suppossed檢查所有控件TAG爲「必需」,並突出顯示它找到的。控件不轉換爲靜態方法的標記屬性

它工作正常,如果我從UserControl調用它,並且要顯示的控件不包含在GroupBox中,但是當它們是TAG似乎沒有遇到。想法?

這裏的方法 - >

public static void HighlightRequiredFields(Control container, Graphics graphics, Boolean isVisible) 
    { 
     var borderColor = Color.FromArgb(173, 216, 230); 
     const ButtonBorderStyle borderStyle = ButtonBorderStyle.Solid; 
     const int borderWidth = 3; 

     Rectangle rect = default(Rectangle); 
     foreach (Control control in container.Controls) 
     { 
      if (control.Tag is string && control.Tag.ToString() == "required") 
      { 
       rect = control.Bounds; 
       rect.Inflate(3, 3); 
       if (isVisible && control.Text.Equals(string.Empty)) 
       { 
        ControlPaint.DrawBorder(graphics, rect, 
        borderColor, 
        borderWidth, 
        borderStyle, 
        borderColor, 
        borderWidth, 
        borderStyle, 
        borderColor, 
        borderWidth, 
        borderStyle, 
        borderColor, 
        borderWidth, 
        borderStyle); 
       } 
       else 
       { 
        ControlPaint.DrawBorder(graphics, rect, container.BackColor, ButtonBorderStyle.None); 
       } 
      } 

      if (control.HasChildren) 
      { 
       foreach (Control ctrl in control.Controls) 
       { 
        HighlightRequiredFields(ctrl, graphics, isVisible); 
       } 
      } 
     } 
    } 

回答

0

這應該正確定位標籤(你可以在調試器步進通過檢查),所以我認爲這個問題是更容易與繪圖。有幾件事可能會造成問題。

首先,Control.Bounds屬性相對於父元素。因此,當您遞歸到子控件集合中時,矩形將以「錯誤」座標繪製:例如,如果子控件位於組框的左上角,則其邊界可能爲(0,0,100,100),但是您'd實際上是想要在組框座標處繪製矩形。

其次,我相信子控件,因爲它是一個單獨的HWND,將出現在父控件的Graphics上下文的頂部。即你正在繪製父控件(UserControl說),但是子控件(GroupBox說)超出了這個範圍,使得你的繪圖變得模糊。

對於這兩個問題,解決方案是獲取子控件的圖形上下文並將其傳遞給遞歸調用。

相關問題