6

wpfテキストボックス内のテキストがその長さを超えているかどうかを知る方法はありますか?

注:私はピクセルの長さについて話しているのであって、最大長の文字の長さではありません

つまり、基本的に、テキストボックスの長さが50ピクセルの場合。そして、私はその中に次のようなテキストを持っています:「スーパーカリフラジリスティックエクスピアリドーシャス!それの音はかなり厄介なものですが」

それならそこには収まりませんよね?収まらないことを知りたいのですが。ただし、テキストボックスの幅が900ピクセルの場合。それはそうかもしれません。

私は現在、次のようなものでチェックしています。

private double GetWidthOfText()
{
    FormattedText formattedText = new FormattedText(MyTextbox.Text,
        System.Globalization.CultureInfo.GetCultureInfo("en-us"),
        FlowDirection.LeftToRight, new Typeface(new FontFamily("Arial"), FontStyles.Normal, FontWeights.Bold, FontStretches.Normal), MyTextbox.FontSize, Brushes.Black);
    return formattedText.Width;
}

..。

if (textBox.Width < GetWidthOfText()) ...

しかし、私はそれが信じられないほどハッキーであり、実際に機能することは決してないことに気づきました。もっと信頼できるものを見つけようとしています。何か案は?

4

5 に答える 5

7

テキスト ボックスから継承し、必要な値を返すカスタム メソッドを作成できます。

public class MyTextBox :TextBox 
{
    public bool ContentsBiggerThanTextBox()
    {
        Typeface typeface = new Typeface(this.FontFamily, this.FontStyle, this.FontWeight, this.FontStretch);
        FormattedText ft = new FormattedText(this.Text, System.Globalization.CultureInfo.CurrentCulture, System.Windows.FlowDirection.LeftToRight, typeface, this.FontSize, Brushes.Black);
        if (ft.Width > this.ActualWidth)
            return true;

        return false;
    }
}

XAML でテキスト ボックスを TextBox ではなく MyTextBox として宣言すると、次のように簡単に実行できます。

private void button1_Click(object sender, RoutedEventArgs e)
{
    if (tb.ContentsBiggerThanTextBox())
        MessageBox.Show("The contents are bigger than the box");
}
于 2012-06-05T16:55:09.187 に答える
4
if (textBox.ExtentWidth > textBox.ActualWidth)
{
    // your textbox is overflowed
}

.NET 4.5.2 で動作

于 2016-08-23T16:27:40.643 に答える
2

.NET 4.5 以降のフレームワークを対象としていない場合、John Koemer の回答は機能しません。

私のように .NET 4.0 フレームワークをターゲットにしている場合は、この方法を使用します。

    private bool IsContentsBiggerThanTextBox(TextBox textBox)
    {
        Size size = TextRenderer.MeasureText(textBox.Text, textBox.Font);
        return ((size.Width > textBox.Width) || (size.Height > textBox.Height));
    }

これは、複数行のテキスト ボックスでも機能します。したがって、テキストボックスが表示できるよりも多くの行がある場合、この方法も機能します。

これは実際には WPF アプリケーションではなく Windows フォーム アプリケーションで行われたため、WPF 側で動作することは保証されません。

于 2015-09-03T17:32:33.740 に答える
-1

これでうまくいくはずです。

        int tblength = txtMytextbox.MaxLength;
        string myString = "My text";
        if (myString.Length > tblength)

私はこれをWebフォームで行いましたが、すべてバックエンドにあるため、winformでも同じであると思います。

于 2012-06-05T16:19:25.917 に答える