[英]How do I resize a custom control I've built
我正在使用以下代碼調整自定義控件的大小:
private void Form1_Resize_1(object sender, EventArgs e)
{
textBox1.Text = this.Width.ToString();
textBox2.Text = (this.Height - 200).ToString();
canvas21.Size = new System.Drawing.Size(this.ClientSize.Width, this.ClientSize.Height - this.Top - 15);
canvas21.Invalidate();
}
我只想讓自定義控件(0,105)的左上角保持原位,並且控件要隨表單一起調整大小,但由於某種原因,這不起作用。 當我調整控件的大小時保持原位,但會自動調整大小以填寫表單的其余部分。
有沒有辦法獲得影響用戶控件大小的所有內容的列表。 為了搜索我設置的其他地方,我可能會忽略這些地方?
真的沒有理由為什么設置高度然后錨定到每一側(對接設置為無)不應該工作。
但是,我確實注意到您提供的代碼的邏輯錯誤。 你有:
canvas21.Size = new System.Drawing.Size(this.ClientSize.Width, this.ClientSize.Height - this.Top - 15);
什么時候應該是:
canvas21.Size = new System.Drawing.Size(this.ClientSize.Width, this.ClientSize.Height - this.canvas21.Top - 15);
你只是在表單的頂部,而不是canvas21的頂部,這是你需要的。
這似乎正是你想要的,至少從我的角度來看。 如果它不能正常工作,是不是根本沒有為你調整大小,還是調整到錯誤的大小?
如果可以設置,使用Anchor屬性是更好的方法。 鎖定的是
left, top, right, bottom (all!)
錨定使您可以控制x個單位形成您鎖定的一側,使其始終與側面保持相同的距離。
如果這不是一個選項,或只是為了讓你的代碼繼續下去,試試這個
private void Form1_Resize_1(object sender, EventArgs e)
{
textBox1.Text = this.Width.ToString();
textBox2.Text = (this.Height - 200).ToString();
int iTop = canvas21.Top;
int iLeft = canvas21.Left;
// - 200 - iTop keeps it 200 from the bottom, -iLeft keeps i stuck to right
canvas21.Size = new System.Drawing.Size(this.Width -iLeft, this.Height-200 -iTop);
canvas21.Left = iLeft; // move back
canvas21.Top = iTop; // move back
canvas21.Invalidate();
}
要保持15 pixels in the bottom
上面的200
更改為15
。 或者,在設計時或通過代碼將其設置為15,激活bottom
錨點。
對於除自定義控件之外的控件,您可以正確調整大小嗎? 例如,如果您放入一個richtextbox並相應地設置Anchor(全部),它會為您正確調整大小嗎? 如果確實如此,那么你的控制器的尺寸肯定會有些可疑,但是你可以通過這樣做來欺騙它......
如果您的面板當然沒有正確調整大小,那么這對您不起作用。 當然,這可能是一個基礎代碼問題的解決方法,在一個完美的世界中,它將在控件本身上進行重新編寫。
我正在調整用戶控件的大小,我正在使用許多不同的事件來處理這個問題(例如,OnSizeChanged,OnFontChanged,OnTextChanged)
根據您的控件中文本框的適用方式會有所不同,但如果您的主容器具有屬性AutoScaleMode或AutoSize,那么您可能會發現您沒有捕獲所有相關事件。
如果我因為我不熟悉這種事情,我會提前通知我。
PS。 我最初沒有找到你的帖子,因為我一直在尋找標簽Windows-forms-designer和custom-control。 我真的不知道我應該使用哪些標簽,並且不能使用所有可能性,因為5的限制接管!
伙計,你要踢自己。 你不想要ClientSize.Height - Top - 15,你想要ClientSize.Height - canvas21.Top - 15.就是這樣!
private void Form1_Resize_1(object sender, EventArgs e)
{
textBox1.Text = this.Width.ToString();
textBox2.Text = (this.Height - 200).ToString();
canvas21.Size = new System.Drawing.Size(this.ClientSize.Width,
this.ClientSize.Height - canvas21.Top - 15);
canvas21.Invalidate();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.