ファイルの保存・読み出し処理
GUIが出来上がりましたので、ビハインドコードでファイルの保存・読み出し処理を作成します。この処理は、System.IO名前空間にあるFileクラスを使用します。
C1RichTextBoxコントロールは、入力されたデータをHTML形式で保存します。こうすると、文字の属性や画像などのデータも一緒に保存されます。
このデータは、C1RichTextBoxコントロールのHTMLプロパティに格納されます。データを表示する場合もこのHTMLプロパティに設定します。
① 最初にSystem.IO名前空間への参照を設定します。
Imports System.IO Class MainWindow Public Sub New() InitializeComponent()
using System.IO; namespace RichTB_WPF_cs { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent();
② 次に、ファイルに保存する処理をButton1のClickイベントハンドラに作成します。
この処理は、まずファイルを保存するダイアログボックスを表示して保存するファイル名を取得し、FileクラスのWriteAllTextメソッドを使って書き込みます。
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
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プロパティに設定します。
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
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コントロールのサイズはウィンドウのサイズに合わせて自動的に調節されます。
削除するコード
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
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; }
まとめ
C1Toolbarコントロールを使うと、WPFアプリケーションに独自のツールバーを組み込むことができます。
ツールバーは、タブやグループを利用することで、Microsoft Officeアプリケーションにあるリボン風のツールバーに仕上げることが可能です。