我正在處理一些自定義控件,我正在尋找一些反饋。其中一個控件在設計時看起來與標準TextBox類似,當它被拖放到設計圖面上時,控件的名稱將寫入文本區域。這一切都很好,但我覺得有一個更簡單的方法來完成我所做的。我有以下代碼:現在DrawString()問題和調整自定義控件的大小
public override void Draw(Graphics graphics)
{
graphics.FillRectangle(new SolidBrush(BackColor), ClientRectangle);
graphics.DrawString(Text, Font, new SolidBrush(ForeColor), TextRectangle, format);
DrawControl(graphics);
}
protected void DrawControl(Graphics graphics)
{
CotrolPaint.DrawBorder3D(graphics, ClientRectangle, Border3DStyle.Etched);
}
protected Rectangle TextRectangle
{
get
{
return new Rectangle(ClientRectangle.Left + 2,
ClientRectangle.Top + 2,
ClientRectangle.Width - 5,
ClientRectangle.Height - 5);
}
}
回顧過去的代碼,TextRectangle也許應該是一個只讀的常量,但我離題。代碼非常簡單,我掛上的是我的TextRectangle屬性。我使用這個的原因是ClientRectangle而不是ClientRectangle,因爲在矩形內寫入的文本會被幾個像素截斷。因此,我有一個稍微偏移一點的小矩形。這有效,但感覺就像是「黑客」。我不得不相信,比我在這裏展示的更好的方式來做到這一點。
我的下一個問題很難解釋,所以我提供了幾個圖像。如果我從工具箱到設計界面上拖我的自定義控件,它看起來與此類似:
但是如果我手動調整控制,選擇矩形保留其原來的大小:
我在如何解決這個問題上有點不知所措。任何問題的任何幫助將不勝感激!
King King:謝謝您的反饋!至於第二部分,您提供的選擇框不重新繪製的原因是正確的,但您的修復不是。隨着控件在設計圖面上調整大小,OnSizeChanged事件會不斷調用,但在調整大小後,選擇框仍然是原始大小。 我知道問題在於控件未被正確無效,因爲如果我調整控件的大小然後手動更改屬性,選擇控件將被正確重畫。我的想法是鉤住ResizeEnd事件,但控制不公開這一點。 = \ – dparsons
@abszero如果是這樣,我認爲你的問題確實非常非常奇怪。我有一些自定義控件的經驗,在任何情況下,重寫'OnSizeChanged'就足夠了。 –