C# 如何将文本框中条目的长度限制为其宽度

C# 如何将文本框中条目的长度限制为其宽度,c#,textbox,C#,Textbox,c#: 默认情况下,文本框接受n个条目 我想限制条目的宽度 文本框中是否有任何属性,我可以通过它来实现这一点,否,要做到这一点,恐怕您必须通过文本框宽度手动计算它们可以输入的最大字符数。您还必须考虑字体和字体大小。不,要做到这一点,您必须手动计算文本框宽度可以输入的最大字符数。您还必须考虑字体和字体大小,默认情况下它只接受字符的32767 您可以在textbox属性 希望您使用的是windows窗体默认设置,它只接受字符数32767 您可以在textbox属性 希望您使用的是windows窗体,

c#: 默认情况下,文本框接受n个条目

我想限制条目的宽度


文本框中是否有任何属性,我可以通过它来实现这一点,

否,要做到这一点,恐怕您必须通过文本框宽度手动计算它们可以输入的最大字符数。您还必须考虑字体和字体大小。不,要做到这一点,您必须手动计算文本框宽度可以输入的最大字符数。您还必须考虑字体和字体大小,默认情况下它只接受字符的32767

您可以在
textbox属性


希望您使用的是windows窗体

默认设置,它只接受字符数
32767

您可以在
textbox属性


希望您使用的是windows窗体,您可以计算要绘制的文本的宽度,如果超过文本框宽度,则返回


您可以找到一个很好的例子。

您可以计算要绘制的文本的宽度,如果它超过文本框的宽度,则返回


您可以找到一个很好的例子。

假设使用WinForms,请尝试以下方法:

private bool textExceedsWidth;

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    textExceedsWidth = false;

    if (e.KeyCode == Keys.Back)
        return;

    Size textSize = TextRenderer.MeasureText(textBox1.Text, textBox1.Font);

    if (textBox1.Width < textSize.Width)
        textExceedsWith = true;
}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (textExceedsWidth)
        e.Handled = true;
}
private bool textextextexexceedswidth;
私有void textBox1\u KeyDown(对象发送方,KeyEventArgs e)
{
textexExceedswidth=false;
if(e.KeyCode==Keys.Back)
返回;
Size Text Size=TextRenderer.MeasureText(textBox1.Text,textBox1.Font);
if(textBox1.Width
假设使用WinForms,请尝试以下操作:

private bool textExceedsWidth;

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    textExceedsWidth = false;

    if (e.KeyCode == Keys.Back)
        return;

    Size textSize = TextRenderer.MeasureText(textBox1.Text, textBox1.Font);

    if (textBox1.Width < textSize.Width)
        textExceedsWith = true;
}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (textExceedsWidth)
        e.Handled = true;
}
private bool textextextexexceedswidth;
私有void textBox1\u KeyDown(对象发送方,KeyEventArgs e)
{
textexExceedswidth=false;
if(e.KeyCode==Keys.Back)
返回;
Size Text Size=TextRenderer.MeasureText(textBox1.Text,textBox1.Font);
if(textBox1.Width
我知道这个问题有点老了,但对任何人来说,这是乔治答案的扩展。它与Ctrl+v、上下文菜单粘贴和键盘输入一起工作

private string oldText;

private void txtDescrip_KeyPress(object sender, KeyPressEventArgs e)
{
    oldText = txtDescrip.Text;
}

private void txtDescrip_TextChanged(object sender, EventArgs e)
{
    Size textSize = TextRenderer.MeasureText(txtDescrip.Text, txtDescrip.Font);

    if (textSize.Width > txtDescrip.Width)//better spacing txtDescrip.Width - 4
        txtDescrip.Text = oldText;
    else
        oldText = txtDescrip.Text;
}

我知道这个问题有点老了,但对任何一个看这个问题的人来说,这是乔治答案的扩展。它与Ctrl+v、上下文菜单粘贴和键盘输入一起工作

private string oldText;

private void txtDescrip_KeyPress(object sender, KeyPressEventArgs e)
{
    oldText = txtDescrip.Text;
}

private void txtDescrip_TextChanged(object sender, EventArgs e)
{
    Size textSize = TextRenderer.MeasureText(txtDescrip.Text, txtDescrip.Font);

    if (textSize.Width > txtDescrip.Width)//better spacing txtDescrip.Width - 4
        txtDescrip.Text = oldText;
    else
        oldText = txtDescrip.Text;
}

除非你使用固定宽度的字体,否则你为什么要这样做?在比例宽度字体中,字母i比字母W窄得多。我们说的是ASP.NET、WPF还是WinForms?除非使用固定宽度字体,否则为什么要这样做?在比例宽度字体中,字母i比字母W窄得多。我们说的是ASP.NET、WPF还是WinForms?