C 在Winform下文字高度計算方法

2021-09-17 20:38:06 字數 981 閱讀 6031

首先明確一點,winform下的所有ui繪製都是基於gdi+的,所以網上能找到的關於文字高寬計算的都採用以下方式來進行

string content = "目標文字";

graphics g = this.creategraphics(); //this是指所有control派生出來的類,這裡是個form

sizef size = g.measurestring(content, new font(fontname, fontheight, fontstyle.regular));

但通過measurestring計算出來的長度隨著字數的增加,誤差會越來越大,具體原因有興趣研究的可以看一下freetype這個開源庫對文字的處理過程。

同時,這種測定是單行文字,計算高度的時候需要除行寬來計算行數,再設定行高,一來二去誤差就不可避免了。

如何解決這個誤差,看你需要的場景,所有的control都有乙個公共方法,就是獲取這個控制項的點陣圖資訊。那麼思路就很明確了。在你需要排版的控制項內放置這些文字,把控制項的高度足夠高,然後設定邊框為none,這麼做是為了避免影象處理時的干擾,最後通過對位圖操作,裁減掉點陣圖下放的空白區域,得到的新位圖就是你要獲取的資訊,位圖高度就是真實高度。

下邊的例子是基於textbox多行模式下獲取文字的高度。返回值y就是最終高度座標。

///獲取控制項的點陣圖

private bitmap getbitmap(control c)

///傳入位圖獲取真實高度

private int resizebitmap(bitmap bmp)

else

isblank = true;

}if (start >= 0)

else

count = 0;

}if (count == 1)

end = y;

if (count > 20)

}return y;

}

iOS中的長文字高度計算

很多的時候如果只是要顯示一些簡單的短文本,比如確定 取消什麼的,乙個uilabel就足夠了。但是某些情況下,文字較長。包含這些文字的view的高度取決於文字的高度。比如我們常見的 微博。雖然文字所佔的高度內容限制在了140字,但是使用者發的微博是140字內的多少字,我們不清楚。那麼在用到uitabl...

C 在WinForm開發中Label換行方法

第一種是把label的autosize屬性設為false,手動修改label的大小.這樣的好處是會因內容的長度而自動換行,但是當內容的長度超過所設定的大小時,多出的內容就會無法顯示.因此,這種方法適合於基本確定內容長度的時候使用。第二種是把label的dock設為fill,同時將autosize屬性...

C 在WinForm開發中Label換行方法

第一種是把label的autosize屬性設為false,手動修改label的大小.這樣的好處是會因內容的長度而自動換行,但是當內容的長度超過所設定的大小時,多出的內容就會無法顯示.因此,這種方法適合於基本確定內容長度的時候使用。第二種是把label的dock設為fill,同時將autosize屬性...