SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(ComponentOne)

カスタムツールバーを実装したワープロ風WPFアプリケーションの作成

ComponentOne Studioを活用したWindowsフォームアプリケーションの作成

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

ファイルの保存・読み出し処理

 GUIが出来上がりましたので、ビハインドコードでファイルの保存・読み出し処理を作成します。この処理は、System.IO名前空間にあるFileクラスを使用します。

 C1RichTextBoxコントロールは、入力されたデータをHTML形式で保存します。こうすると、文字の属性や画像などのデータも一緒に保存されます。

 このデータは、C1RichTextBoxコントロールのHTMLプロパティに格納されます。データを表示する場合もこのHTMLプロパティに設定します。

 ① 最初にSystem.IO名前空間への参照を設定します。

Visual Basic
Imports System.IO

Class MainWindow
    Public Sub New()
        InitializeComponent()
C#
using System.IO;
namespace RichTB_WPF_cs
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

 ② 次に、ファイルに保存する処理をButton1のClickイベントハンドラに作成します。

 この処理は、まずファイルを保存するダイアログボックスを表示して保存するファイル名を取得し、FileクラスのWriteAllTextメソッドを使って書き込みます。

Visual Basic
Private Sub Button2_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button2.Click
    Dim dlg As New Microsoft.Win32.SaveFileDialog()
    Dim filename As String = ""

    dlg.FileName = "HTMLファイル" ' Default file name
    dlg.DefaultExt = ".html" ' Default file extension
    dlg.Filter = "HTMLファイル (.html)|*.html" ' Filter files by extension

    Dim result As Boolean = dlg.ShowDialog()
    If result = True Then
        filename = dlg.FileName
        File.WriteAllText(filename, C1RichTextBox1.Html)
    End If
End Sub
C#
private void Button2_Click(object sender, RoutedEventArgs e)
{
    Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
    String filename = "";

    dlg.FileName = "HTMLファイル";  //Default file name
    dlg.DefaultExt = ".html";       // Default file extension
    dlg.Filter = "HTMLファイル (.html)|*.html"; // Filter files by extension

    bool? result = dlg.ShowDialog();
    if (result == true)
    {
        filename = dlg.FileName;
        File.WriteAllText(filename, C1RichTextBox1.Html);
    }
}

 ③ ファイルを開く処理を、Button2のClickイベントハンドラに作成します。

 この処理も、ファイルを開くダイアログボックスを表示してファイル名を取得し、FileクラスのReadAllTextメソッドで読み出し、C1RichTextBoxコントロールのHTMLプロパティに設定します。

Visual Basic
Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
    Dim dlg As New Microsoft.Win32.OpenFileDialog()
    Dim filename As String = ""
    Dim data As String = ""

    dlg.FileName = "HTMLファイル" ' Default file name
    dlg.DefaultExt = ".html" ' Default file extension
    dlg.Filter = "HTMLファイル (.html)|*.html" ' Filter files by extension

    Dim result As Boolean = dlg.ShowDialog()
    If result = True Then
        filename = dlg.FileName
        data = File.ReadAllText(filename)
        C1RichTextBox1.Html = data
    End If
End Sub
C#
private void Button1_Click(object sender, RoutedEventArgs e)
{
    Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
    String filename = "";
    String data = "";

    dlg.FileName = "HTMLファイル";  // Default file name
    dlg.DefaultExt = ".html";   // Default file extension
    dlg.Filter = "HTMLファイル (.html)|*.html";     // Filter files by extension

    bool? result = dlg.ShowDialog();
    if (result == true)
    {
        filename = dlg.FileName;
        data = File.ReadAllText(filename);
        C1RichTextBox1.Html = data;
    }
}
アプリケーションを実行しファイルの保存・読み出しを確認する
アプリケーションを実行しファイルの保存・読み出しを確認する

ウィンドウリサイズ処理の削除

 最後に、ウィンドウをリサイズした時のリッチテキストボックスのサイズ調節の処理を削除します。

 前回までのアプリケーションでは、ウィンドウのリサイズ処理をウィンドウのSizeChangedイベントハンドラで行っていましたが、グリッドの自動リサイズ機能を使えばこのようなイベント処理は必要ないため、SizeChangedイベントハンドラのコードはすべて削除します。

 また、VBのみ<Window>要素にある「SizeChanged="Window1_SizeChanged"」を削除します。

 すでに、グリッドの2行目にあたる<Grid.RowDefinitions >要素と<Grid.ColumnDefinitions>要素ではサイズの指定は行っておらず、C1RichTextBoxコントロールのサイズ指定のプロパティは削除してあります。こうしておけば、ウィンドウをリサイズした時に、C1RichTextBoxコントロールのサイズはウィンドウのサイズに合わせて自動的に調節されます。

削除するコード
Visual Basic
Private Sub Window1_SizeChanged(sender As System.Object, e As System.Windows.SizeChangedEventArgs) Handles MyBase.SizeChanged
    Grid1.Width = Window1.Width
    C1RichTextBox1.Width = Grid1.Width - 20
    C1RichTextBoxToolbar1.Width = Grid1.Width

    Dim ht As New GridLength(Window1.Height - Grid1.RowDefinitions(0).Height.Value)

    Grid1.RowDefinitions(1).Height = ht
    C1RichTextBox1.Height = ht.Value - 40
End Sub
C#
private void Window1_SizeChanged(object sender, SizeChangedEventArgs e)
{
    Grid1.Width = Window1.Width;
    C1RichTextBox1.Width = Grid1.Width - 20;
    C1RichTextBoxToolbar1.Width = Grid1.Width;

    GridLength ht = new GridLength(Window1.Height - Grid1.RowDefinitions[0].Height.Value);

    Grid1.RowDefinitions[1].Height = ht;
    C1RichTextBox1.Height = ht.Value - 40;
}
SizeChangedイベントハンドラを使わなくてもウィンドウのサイズを変えるとリッチテキストボックスもサイズが変更される
ウィンドウのサイズを変えてもリッチテキストボックスのサイズ変更が行われる

まとめ

 C1Toolbarコントロールを使うと、WPFアプリケーションに独自のツールバーを組み込むことができます。

 ツールバーは、タブやグループを利用することで、Microsoft Officeアプリケーションにあるリボン風のツールバーに仕上げることが可能です。

修正履歴

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ComponentZine(ComponentOne)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7519 2013/11/28 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング