Home > C# > 目的別資料 > エディタ > RichTextBox

ファイルダイアログを追加する

最終更新日

概要

前回、RichTextBoxの内容を保存、読み込み、印刷機能を実装する方法を確認しました。 そこでは、ファイル名やディレクトリは、プログラム内に直接書き込んでいました(ハードコード)。

ここでは、プログラム中でそれらを指定することができるダイアログを使う方法について紹介します。

コードの使い方

新規にWPFアプリケーションを作成して、張り付けます。 その場合は、Xamlコードの一番上に、<Windows>タグのx:Class属性に、[プロジェクト名].[コード名]が 記載されていますので、この部分を変更します。


<Window x:Class="RichTextBox001.MainWindow"				
			

ファイルダイアログの実装

前のサンプルでは、ファイル名は、コード内に記入するハードコードしたものでした。 ここでは、そのサンプルコードにファイルダイアログを追加して、ダイアログでファイルを追加できるようにします。

メインウィンドウの要素の配置は、DockPanelに変更しました。DockPanelは、最後の要素に残りの全てのスペースが割り当てられるので、下の要素から指定しています。

[Xaml]


<Window x:Class="RichTextBoxDialog.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="200" Width="300">
    <DockPanel>
        <Button DockPanel.Dock="Bottom" Click="PrintRTBContent">RichTextBoxの内容の印刷</Button>
        <Button DockPanel.Dock="Bottom" Click="LoadRTBContent">RichTextBoxの内容の読込</Button>
        <Button DockPanel.Dock="Bottom" Click="SaveRTBContent">RichTextBoxの内容を保存</Button>

        
        <RichTextBox DockPanel.Dock="Top" Name="richTB">
            <FlowDocument>
                <Paragraph>
                    <Run>Paragraph 1</Run>
                </Paragraph>
            </FlowDocument>
        </RichTextBox>

    </DockPanel>

</Window>
			

[Xaml.cs]


using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Media;

using System.IO;        // ファイルの読み書きに必要
using Microsoft.Win32;  // オープンファイル・ダイアログボックスで使用する。

namespace RichTextBoxDialog
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {

        public MainWindow()
        {
            InitializeComponent();
        }

        private void SaveRTBContent(object sender, RoutedEventArgs e)
        {
            // 「RichTextBoxの内容を保存」ボタンのクリックイベントを処理します。
            SaveXamlPackage();
        }

        private void LoadRTBContent(object sender, RoutedEventArgs e)
        {
            // 「RichTextBoxの内容の読込」ボタンのクリックイベントを処理します。
            LoadXamlPackage();
        }

        private void PrintRTBContent(object sender, RoutedEventArgs e)
        {
            // 「RichTextBoxの内容の印刷」ボタンのクリックイベントを処理します。
            PrintCommand();

        }

        void SaveXamlPackage()
        {
            // ファイル名をダイアログで指定して保存します。

            // ファイル名を指定します。
            // Configure save file dialog box セーブ・ファイル・ダイアログボックスを設定します。
            SaveFileDialog dlg = new SaveFileDialog();

            dlg.FileName = "Document"; // Default file name 既定のファイル名
            dlg.DefaultExt = ".xaml"; // Default file extension 既定のファイル拡張子
            dlg.Filter = "RichText documents (.xaml)|*.xaml";
            // Filter files by extension 拡張機能によってファイルにフィルターをかけます。

            // Show save file dialog box 既定のファイル拡張子
            Nullable<bool> result = dlg.ShowDialog();

            // Process save file dialog box results 
            // セーブ・ファイル・ダイアログボックスを表示します。
            if (result == true)
            {
                // ファイルを保存します。
                TextRange range;
                FileStream fStream;
                range = new TextRange(richTB.Document.ContentStart, richTB.Document.ContentEnd);
                fStream = new FileStream(dlg.FileName, FileMode.Create);
                range.Save(fStream, DataFormats.XamlPackage);
                fStream.Close();
            }

        }

        void LoadXamlPackage()
        {
            // ファイル名を指定して読み込みます。

            // ファイル名を指定します。
            // Configure open file dialog box オープンファイル・ダイアログボックスを設定します。
            OpenFileDialog dlg = new OpenFileDialog();

            dlg.FileName = "Document"; // Default file name 既定のファイル名
            dlg.DefaultExt = ".xaml"; // Default file extension 既定のファイル拡張子
            dlg.Filter = "RichText documents (.xaml)|*.xaml";
            // Filter files by extension 拡張機能によってファイルにフィルターをかけます。

            // Show open file dialog box オープンファイル・ダイアログボックスを表示します。
            bool? result = dlg.ShowDialog();

            // Process open file dialog box results オープンファイル・ダイアログボックスの結果を処理します。
            if (result == true)
            {
                // ファイルを読み込みます。
                TextRange range;
                FileStream fStream;
                if (File.Exists(dlg.FileName))
                {
                    range = new TextRange(richTB.Document.ContentStart, richTB.Document.ContentEnd);
                    fStream = new FileStream(dlg.FileName, FileMode.OpenOrCreate);
                    range.Load(fStream, DataFormats.XamlPackage);
                    fStream.Close();
                }
            }
        }

        // Print RichTextBox content
        // RichTextBox内容を印刷する
        private void PrintCommand()
        {
            PrintDialog pd = new PrintDialog();
            if ((pd.ShowDialog() == true))
            {
                // use either one of the below  
                // 以下のどちらかを使用してください。
                pd.PrintVisual(richTB as Visual, "printing as visual");
                pd.PrintDocument((((IDocumentPaginatorSource)richTB.Document).DocumentPaginator), "printing as paginator");
            }
        }

     
    }
}
			
メインウィンドウ 保存ダイアログ 読込ダイアログ 印刷ダイアログ
Codeをダウンロード

参考リンク

動作確認環境

  • WIndows 8.1 pro 64bit
  • Visual Studio Express 2013 for Desktop

次のページの内容

次のページでは、このページの内容を活用して、編集ツールバーとファイルツールバーのついたRichTextBoxを作成します。

このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」