Вы можете смоделировать появление границы вокруг вашего пользовательского элемента управления, используя тщательно расположенный элемент управления Panel в вашем UC и наблюдая за положением мыши, отслеживая сообщения Windows низкого уровня.
В дизайне UserControlПоверхность Добавьте панель и измените размер панели так, чтобы была видна только небольшая часть проектной поверхности UC (см. примечание * ниже).Видимая часть поверхности дизайна будет вашей цветной рамкой, поэтому установите ее «толщину» соответственно.Добавьте другие элементы управления, составляющие ваш UC, на панель.
Ваш элемент управления может выглядеть следующим образом:

Реализация интерфейса IMessageFilter в вашем UC.В вашей реализации PreFilterMessage () вы будете проверять положение мыши относительно UC и установите BackColor UC на цвет границы, когда мышь находится над UC, или верните цвет по умолчанию, если это не так.Поскольку BackColor панели не изменяется, он будет казаться пользователю таким, как у вашего UC есть граница.
Вот минимальный объем кода, который вам понадобится для этого:
public partial class UserControl1 : UserControl, IMessageFilter
{
public UserControl1() {
InitializeComponent();
Application.AddMessageFilter(this);
}
public bool PreFilterMessage(ref Message m) {
if (!this.IsDisposed && this.ClientRectangle.Contains(this.PointToClient(Control.MousePosition))) {
this.BackColor = Color.Green; // Or whatever border color you want.
} else {
this.BackColor = SystemColors.Control; // Back to the UC's default border color.
}
return false;
}
}
Примечание: Когда я проверял это, у меня были трудности с настройкой BackColor моей панели, чтобы она не была прозрачной.Я исправил это, временно изменив BackColor в конструкторе на другой цвет, а затем изменив его на цвет по умолчанию (Control).