C#のTextBoxで最下行に自動でスクロールする方法

C#のTextBoxに文字列を大量に表示したときに、スクロールを自動的に行って最下行を表示する方法を試してみます。

目次

  1. TextBoxは自動的には最下行を表示しない
    1. XAML
    2. XMLの説明
    3. コード
    4. コードの説明
    5. 実施例
  2. TextBoxを強制的にスクロールする
    1. 強制的にスクロールするコード
    2. 強制的にスクロールするコードの説明
    3. 強制的にスクロールするコードの実施例

TextBoxは自動的には最下行を表示しない

TextBoxにたくさんの行の文字列を表示してみましょう。

XAML

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="200" Width="200" Loaded="Window_Loaded">
    <Grid>
        <TextBox Name="TextBoxTest" Margin="10" VerticalScrollBarVisibility="Auto" />
    </Grid>
</Window>

XMLの説明

WindowにTextBlockを配置しただけの簡素なものです。TextBoxにVerticalScrollBarVisibilityを設定して、縦スクロールバーが表示されるようにしてあります。

コード

using System;
using System.Windows;

namespace WpfApp1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            for (int i = 0; i < 100; i++)
            {
                TextBoxTest.Text = TextBoxTest.Text + i.ToString() + Environment.NewLine;
            }
        }
    }
}

コードの説明

WindowがLoadされたら、TextBoxに0から99までの文字を1行ずつ表示します。

実施例

上述のプログラムを実行すると、このようになります。

実施例

TextBoxには文字列の最初の部分が表示されています。

最下行の方を見ようとしたら、TextBoxをスクロールしなくてはならないですね。これではちょっと面倒なこともあります。

TextBoxを強制的にスクロールする

TextBoxにはScrollToEndというメソッドがありますので、それを利用します。このメソッドは、コントロールのビューを内容の最後までスクロールするメソッドです。

TextBox.ScrollToEnd();

変数

内容

TextBox

TextBox

スクロールする対象のTextBoxインスタンス

強制的にスクロールするコード

XAMLの方は変更せず、コードだけを変えてみます。

using System;
using System.Windows;

namespace WpfApp1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            for (int i = 0; i < 100; i++)
            {
                TextBoxTest.Text = TextBoxTest.Text + i.ToString() + Environment.NewLine;
                TextBoxTest.ScrollToEnd();
            }
        }
    }
}

強制的にスクロールするコードの説明

TextBoxに文字を追加した後に、ScrollToEndメソッドを実行するようにしました。

強制的にスクロールするコードの実施例

実行するとこうなります。

実施例(スクロール)

入力した文字列の最後の方が表示されるようになりました。

ログのようなものを表示されるのに便利なのではないかと思います。

公開日

広告