0
當Windows窗體(TextBox,ComboBox,MaskedTextBox,...)中的某些常用控件焦點對齊時,是否有方法更改它們的邊框顏色?我想在我的對話框中實現這一點,所以當控制焦點時,它的邊界變成了藍色?在焦點上更改Windows窗體控件的邊框顏色
當Windows窗體(TextBox,ComboBox,MaskedTextBox,...)中的某些常用控件焦點對齊時,是否有方法更改它們的邊框顏色?我想在我的對話框中實現這一點,所以當控制焦點時,它的邊界變成了藍色?在焦點上更改Windows窗體控件的邊框顏色
我建議提請各地的主動控制,如下一個矩形:
的方法:
// 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;
}
代碼:
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);
};
}
}
祝你好運!