我有一個從UserControl下降的用戶控件。VisualStudio:如何在設計時將虛線邊框添加到UserControl?
當放到表單上時,用戶控件是不可見的,因爲它沒有任何類型的邊框來顯示它自己。
在設計時,PictureBox和Panel控件繪製一個虛線的1px邊框以使其可見。
這樣做的正確方法是什麼?是否有一個屬性可以用來使VS添加?
我有一個從UserControl下降的用戶控件。VisualStudio:如何在設計時將虛線邊框添加到UserControl?
當放到表單上時,用戶控件是不可見的,因爲它沒有任何類型的邊框來顯示它自己。
在設計時,PictureBox和Panel控件繪製一個虛線的1px邊框以使其可見。
這樣做的正確方法是什麼?是否有一個屬性可以用來使VS添加?
沒有財產會自動做到這一點。但是,您可以通過覆蓋控件中的OnPaint並手動繪製矩形來對其進行歸檔。
在重寫的事件中,您可以調用base.OnPaint(e)繪製控件內容,然後添加使用圖形對象在邊線周圍繪製虛線。
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (this.DesignMode)
ControlPaint.DrawBorder(e.Graphics,this.ClientRectangle,Color.Gray,ButtonBorderStyle.Dashed);
}
正如你看到的,你需要在查詢控件DesignMode屬性,因此只有在您的IDE繪製if語句來包裝這個額外的代碼。
Panel
這樣做的方式(這表明這是這樣做的實際正確方法)是DesignerAttribute
。此屬性可用於設計時間添加到Control
組件以及非控制組件(如Timer
)。
使用DesignerAttribute
時,您需要指定從IDesigner
派生的類。對於具體的Control
設計師,您應該從ControlDesigner
中派生出來。
在您的ControlDesigner
的特定實施中,您希望覆蓋OnPaintAdornment
。這種方法的目的是專門在控件之上繪製設計器提示,例如邊框。
以下是Panel
使用的實現。您可以複製該文件並將其用於您的控制,但您顯然需要調整專門指向Panel
課程的部分。
internal class PanelDesigner : ScrollableControlDesigner
{
protected Pen BorderPen
{
get
{
Color color = ((double)this.Control.BackColor.GetBrightness() < 0.5) ? ControlPaint.Light(this.Control.BackColor) : ControlPaint.Dark(this.Control.BackColor);
return new Pen(color)
{
DashStyle = DashStyle.Dash
};
}
}
public PanelDesigner()
{
base.AutoResizeHandles = true;
}
protected virtual void DrawBorder(Graphics graphics)
{
Panel panel = (Panel)base.Component;
if (panel == null || !panel.Visible)
{
return;
}
Pen borderPen = this.BorderPen;
Rectangle clientRectangle = this.Control.ClientRectangle;
int num = clientRectangle.Width;
clientRectangle.Width = num - 1;
num = clientRectangle.Height;
clientRectangle.Height = num - 1;
graphics.DrawRectangle(borderPen, clientRectangle);
borderPen.Dispose();
}
protected override void OnPaintAdornments(PaintEventArgs pe)
{
Panel panel = (Panel)base.Component;
if (panel.BorderStyle == BorderStyle.None)
{
this.DrawBorder(pe.Graphics);
}
base.OnPaintAdornments(pe);
}
}
ScrollableControlDesigner
是,你可能會或可能不希望爲您的特定設計的實施基地,使用一個公共類。