gpt4 book ai didi

C#:在运行时根据控件大小自动调整字体的函数?

转载 作者:太空狗 更新时间:2023-10-29 23:33:12 28 4
gpt4 key购买 nike

在花费大量时间搜索此函数后:

我想如果有人能给我最好的方法就好了。是否有可以根据任何窗体控件(标签/按钮)的大小动态调整字体大小的功能?

这是我在网上研究后得到的,不幸的是,这些代码在运行时控件调整大小时给出了很多异常。

public void textAdjustment()
{
try
{
while (this.label.Width < System.Windows.Forms.TextRenderer.MeasureText(this.label.Text,
new Font(this.label.Font.FontFamily, this.label.Font.Size, this.label.Font.Style)).Width)
{
this.label.Font = new Font(this.label.Font.FontFamily, this.label.Font.Size - 1.0f, this.label.Font.Style);
}
if (this.label.Width > System.Windows.Forms.TextRenderer.MeasureText(this.label.Text, new Font(this.label.Font.FontFamily, this.label.Font.Size, this.label.Font.Style)).Width)
{
this.label.Font = new Font(this.label.Font.FontFamily, this.label.Font.Size + 0.1f, this.tableLabel.Font.Style);
}
if (this.label.Height < System.Windows.Forms.TextRenderer.MeasureText(this.label.Text, new Font(this.label.Font.FontFamily, this.label.Font.Size, this.label.Font.Style)).Height)
{
this.label.Font = new Font(this.label.Font.FontFamily, this.label.Font.Size - 0.6f, this.label.Font.Style);
}
}
catch (Exception e)
{
this.label.Font = Control.DefaultFont;
}
}

我不认为我解决这个问题的方法是正确的,有谁知道即使在运行时增加和减少控件大小也能调整字体大小基础的方法?我个人认为这篇文章将是一个很好的帖子,供其他人引用。

最佳答案

这是一种非常麻烦的代码,字体的适当大小与控件的大小没有很好的相关性。这也不是一件常见的事情,UI 应该在任何窗口大小下都具有可读性和一致性。否则非常不清楚您看到的是哪种异常。明显的错误是忘记关闭标签的 AutoSize 属性并且没有使标签足够高。一些代码可以玩,注意它只适用于标签。在粘贴此代码之前将一个放在表单上:

public partial class Form1 : Form {
public Form1() {
InitializeComponent();
label1.AutoSize = false;
label1.Size = new Size(100, 60);
label1.Text = "Autosize this";
label1.Anchor = AnchorStyles.Left | AnchorStyles.Right;
label1.Resize += new EventHandler(label1_Resize);
}

void label1_Resize(object sender, EventArgs e) {
using (var gr = label1.CreateGraphics()) {
Font font = label1.Font;
for (int size = (int)(label1.Height * 72 / gr.DpiY); size >= 8; --size) {
font = new Font(label1.Font.FontFamily, size, label1.Font.Style);
if (TextRenderer.MeasureText(label1.Text, font).Width <= label1.ClientSize.Width) break;
}
label1.Font = font;
}
}

protected override void OnLoad(EventArgs e) {
label1_Resize(this, EventArgs.Empty);
base.OnLoad(e);
}
}

需要改进,MeasureText() 方法应该使用 Label 控件使用的 TextFormatFlags。但这已经足够好了。

关于C#:在运行时根据控件大小自动调整字体的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11646619/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com