簡體   English   中英

如何調整我構建的自定義控件的大小

[英]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)的左上角保持原位,並且控件要隨表單一起調整大小,但由於某種原因,這不起作用。 當我調整控件的大小時保持原位,但會自動調整大小以填寫表單的其余部分。

表單布局概述

有沒有辦法獲得影響用戶控件大小的所有內容的列表。 為了搜索我設置的其他地方,我可能會忽略這些地方?

如果您希望控件始終使用表單調整大小,可以使用Anchor屬性將其設置為錨定到表單的一個或多個側面,這樣您就不必擁有自己的調整大小代碼(假設標准調整功能可以滿足您的需求)。

您必須確保未設置Dock屬性,否則它可能會填充整個表單(或表單的一側,具體取決於設置)。

真的沒有理由為什么設置高度然后錨定到每一側(對接設置為無)不應該工作。

但是,我確實注意到您提供的代碼的邏輯錯誤。 你有:

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(全部),它會為您正確調整大小嗎? 如果確實如此,那么你的控制器的尺寸肯定會有些可疑,但是你可以通過這樣做來欺騙它......

  1. 創建一個確切大小的面板,並從您的控件中錨定您想要的。
  2. 將控件添加到Panel並將Dock設置為“Fill”。 實際上,您將使用控件填充面板,並使用面板控制表單上的調整大小。

如果您的面板當然沒有正確調整大小,那么這對您不起作用。 當然,這可能是一個基礎代碼問題的解決方法,在一個完美的世界中,它將在控件本身上進行重新編寫。

我正在調整用戶控件的大小,我正在使用許多不同的事件來處理這個問題(例如,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM