全11件 (11件中 1-11件目)
1
以下に、ID、名前、住所、郵便番号、年齢のプロパティを持つC#のサンプルクラスを示します。このクラスは、基本的なデータエンティティとして使用できます。```csharppublic class Person{ public int ID { get; set; } public string Name { get; set; } public string Address { get; set; } public string PostalCode { get; set; } public int Age { get; set; }}```このクラスは非常にシンプルで、各プロパティは自動プロパティとして実装されています。これにより、`Person`オブジェクトのプロパティに簡単にアクセスできます。### 使用例以下は、この`Person`クラスを使用する例です。```csharpusing System;public class Program{ public static void Main() { Person person = new Person { ID = 1, Name = "John Doe", Address = "123 Main St, Anytown, USA", PostalCode = "12345", Age = 30 }; Console.WriteLine($"ID: {person.ID}"); Console.WriteLine($"Name: {person.Name}"); Console.WriteLine($"Address: {person.Address}"); Console.WriteLine($"Postal Code: {person.PostalCode}"); Console.WriteLine($"Age: {person.Age}"); }}```### クラスの詳細- `ID`: 一意の識別子を表す整数プロパティ。- `Name`: 名前を表す文字列プロパティ。- `Address`: 住所を表す文字列プロパティ。- `PostalCode`: 郵便番号を表す文字列プロパティ。- `Age`: 年齢を表す整数プロパティ。この構造は、一般的なデータエンティティの設計に適しており、各プロパティに適切なデータ型を使用しています。
2024.05.29
C# WPFのMVVMパターンは、アプリケーションのUIとビジネスロジックを分離し、テスト可能性と再利用性を向上させるためのアーキテクチャです。以下に、シンプルなMVVMパターンのサンプルコードを示します。### 1. ModelModelは、データとビジネスロジックを表します。ここでは、単純な`Person`クラスを使用します。```csharppublic class Person{ public string FirstName { get; set; } public string LastName { get; set; }}```### 2. ViewModelViewModelは、ModelとViewの間の仲介役を務めます。プロパティやコマンドを公開して、バインディング可能にします。```csharpusing System.ComponentModel;using System.Runtime.CompilerServices;using System.Windows.Input;public class PersonViewModel : INotifyPropertyChanged{ private Person _person; public Person Person { get => _person; set { _person = value; OnPropertyChanged(); } } public string FullName => $"{Person.FirstName} {Person.LastName}"; public ICommand UpdateCommand { get; } public PersonViewModel() { Person = new Person { FirstName = "John", LastName = "Doe" }; UpdateCommand = new RelayCommand(UpdatePerson); } private void UpdatePerson() { Person.FirstName = "Jane"; Person.LastName = "Smith"; OnPropertyChanged(nameof(FullName)); } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }}public class RelayCommand : ICommand{ private readonly Action _execute; private readonly Func<bool> _canExecute; public RelayCommand(Action execute, Func<bool> canExecute = null) { _execute = execute; _canExecute = canExecute; } public bool CanExecute(object parameter) => _canExecute?.Invoke() ?? true; public void Execute(object parameter) => _execute(); public event EventHandler CanExecuteChanged { add => CommandManager.RequerySuggested += value; remove => CommandManager.RequerySuggested -= value; }}```### 3. View (XAML)Viewは、ユーザーインターフェイスを定義し、ViewModelのプロパティにバインドします。```xml<Window x:Class="MVVMSample.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MVVM Sample" Height="200" Width="400"> <Window.DataContext> <local:PersonViewModel/> </Window.DataContext> <Grid> <StackPanel> <TextBlock Text="{Binding FullName}" FontSize="24" HorizontalAlignment="Center"/> <Button Content="Update" Command="{Binding UpdateCommand}" HorizontalAlignment="Center"/> </StackPanel> </Grid></Window>```### 4. MainWindow Code-Behind`MainWindow.xaml.cs`は通常、ViewModelをインスタンス化してDataContextに設定するために使用されます。```csharpusing System.Windows;namespace MVVMSample{ public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } }}```### プロジェクト構成```MVVMSample├── Model│ └── Person.cs├── ViewModel│ └── PersonViewModel.cs│ └── RelayCommand.cs├── View│ └── MainWindow.xaml│ └── MainWindow.xaml.cs```このシンプルなサンプルでは、`Person`モデルを使って、ViewModelの`PersonViewModel`がプロパティ変更を通知し、Viewでそれをバインドして表示する仕組みを実装しています。また、`RelayCommand`クラスを使用して、ボタンのクリックイベントをViewModelにバインドしています。
2024.05.29
WPFで`TextBox`に対して意図的に`LostFocus`イベントを発生させるためには、テキストボックスのフォーカスを他の要素に移す必要があります。これをプログラムから行うには、`FocusManager`を使用して別の要素にフォーカスを設定します。以下に、これを実現するサンプルコードを示します。### サンプルコード#### View (XAML)まず、UIを定義します。ここでは、`TextBox`と別の要素(例えば、`Button`)を配置します。```xml<Window x:Class="LostFocusSample.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"> <StackPanel> <TextBox x:Name="myTextBox" Width="200" Height="30" Margin="10"/> <Button Content="Move Focus" Width="100" Height="30" Margin="10" Click="MoveFocusButton_Click"/> <TextBlock x:Name="dummyElement" Visibility="Collapsed"/> </StackPanel></Window>```#### Code-behind (C#)次に、`Button`のクリックイベントでフォーカスを別の要素に移動するコードを実装します。```csharpusing System.Windows;namespace LostFocusSample{ public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void MoveFocusButton_Click(object sender, RoutedEventArgs e) { // TextBoxのフォーカスを失わせるために、フォーカスをダミーの要素に移動する dummyElement.Focus(); } }}```### 説明- **XAML**: - `TextBox`に名前 (`x:Name="myTextBox"`) を設定。 - `Button`のクリックイベント (`Click="MoveFocusButton_Click"`) を設定。 - `TextBlock`をダミーの要素として使用し、フォーカスを移動します。`Visibility="Collapsed"`に設定することで、UI上に表示されません。- **C#**: - `MoveFocusButton_Click`メソッドで、`dummyElement.Focus()`を呼び出すことにより、`TextBox`のフォーカスを失わせます。 - `dummyElement`は、実際には見えない(`Visibility="Collapsed"`)ので、UIには影響しません。この方法を使用することで、`TextBox`の`LostFocus`イベントを意図的に発生させることができます。`dummyElement`にフォーカスを移すことで、`TextBox`がフォーカスを失い、`LostFocus`イベントがトリガーされます。### 応用別の要素にフォーカスを移すだけでなく、特定のロジックを実行したい場合は、`LostFocus`イベントに対してイベントハンドラーを設定し、その中で必要な処理を行うことも可能です。```csharppublic MainWindow(){ InitializeComponent(); myTextBox.LostFocus += MyTextBox_LostFocus;}private void MyTextBox_LostFocus(object sender, RoutedEventArgs e){ // LostFocusイベント時に実行する処理 MessageBox.Show("TextBox lost focus!");}```このように、`LostFocus`イベントをハンドルし、必要な処理を行うことができます。
2024.05.19
MVVMパターンでテキストボックスの値を変更してもモデルの値が変更されない原因はいくつか考えられます。以下に、その主な原因と対策を示します。### 1. バインディングモードの設定ミステキストボックスの`Text`プロパティに対するバインディングモードが`OneWay`になっていると、UIからモデルへの更新が行われません。これを`TwoWay`に設定する必要があります。**対策:**```xml<TextBox Text="{Binding Name, Mode=TwoWay}" Width="200" Height="30" Margin="10"/>```### 2. プロパティに`INotifyPropertyChanged`が実装されていないモデルのプロパティが変更通知を行っていない場合、ビューが変更を検知できません。**対策:**モデルおよびビューに`INotifyPropertyChanged`を実装します。```csharppublic class Person : INotifyPropertyChanged{ private string _name; public string Name { get { return _name; } set { if (_name != value) { _name = value; OnPropertyChanged(nameof(Name)); } } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }}```### 3. バインディングソースの設定ミスビューでバインディングしているプロパティが正しく設定されていない、またはコンテキストが間違っている場合、データバインディングが機能しません。**対策:**ビューモデルをビューのデータコンテキストに正しく設定しているか確認します。```csharppublic partial class MainWindow : Window{ public MainWindow() { InitializeComponent(); this.DataContext = new MainViewModel(); }}```### 4. バインディングエラーXAMLでのバインディングにタイプミスや存在しないプロパティを指定していると、バインディングが機能しません。**対策:**デバッグウィンドウでバインディングエラーが表示されるか確認し、修正します。バインディングエラーはVisual Studioの出力ウィンドウに表示されます。### 5. バインディングの`UpdateSourceTrigger`設定デフォルトでは、`TextBox`の`Text`プロパティは`LostFocus`イベントでバインディングソースを更新します。これを`PropertyChanged`に設定することで、テキストが変更されるたびにバインディングソースが更新されます。**対策:**```xml<TextBox Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="200" Height="30" Margin="10"/>```### 6. ビューモデルのプロパティ設定ミスビューモデルのプロパティが正しく設定されていない場合も、バインディングが機能しません。**対策:**ビューモデルのプロパティが正しく実装されているか確認します。```csharppublic class MainViewModel : INotifyPropertyChanged{ private Person _person; public MainViewModel() { _person = new Person { Name = "John Doe" }; } public string Name { get { return _person.Name; } set { if (_person.Name != value) { _person.Name = value; OnPropertyChanged(nameof(Name)); } } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }}```### まとめこれらのチェックポイントを確認することで、MVVMパターンにおいてテキストボックスの値がモデルに反映されない問題を解決できます。特に、バインディングモードの設定、`INotifyPropertyChanged`の実装、バインディングエラーの確認は重要です。
2024.05.19
`OneWay`や`TwoWay`バインディングを使用して、読み取り専用のテキストボックスを作成する方法について説明します。`OneWay`バインディングを使用すると、データがビューに反映されますが、ビューからデータモデルへの変更は行われません。このため、テキストボックスを読み取り専用にすることができます。### サンプルコード#### Modelまず、`Person`クラスを定義します。このクラスは`INotifyPropertyChanged`を実装し、プロパティが変更されたときに通知します。```csharpusing System.ComponentModel;namespace ReadOnlyTextBoxSample{ public class Person : INotifyPropertyChanged { private string _name; public string Name { get { return _name; } set { if (_name != value) { _name = value; OnPropertyChanged(nameof(Name)); } } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }}```#### ViewModel次に、`MainViewModel`クラスを定義します。このクラスはモデルをラップし、UIとのバインディングを提供します。```csharpusing System.ComponentModel;namespace ReadOnlyTextBoxSample{ public class MainViewModel : INotifyPropertyChanged { private Person _person; public MainViewModel() { _person = new Person { Name = "John Doe" }; // 初期値設定 } public string Name { get { return _person.Name; } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }}```#### View (XAML)最後に、XAMLでUIを定義します。`TextBox`の`Text`プロパティに`OneWay`バインディングを設定します。```xml<Window x:Class="ReadOnlyTextBoxSample.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"> <Window.DataContext> <local:MainViewModel /> </Window.DataContext> <Grid> <TextBox Text="{Binding Name, Mode=OneWay}" Width="200" Height="30" Margin="10"/> </Grid></Window>```### 説明- **Model**: `Person`クラスは`Name`プロパティを持ち、変更通知を行います。- **ViewModel**: `MainViewModel`クラスは`Person`オブジェクトを管理し、`Name`プロパティを公開します。- **View**: XAMLで定義された`TextBox`は、`MainViewModel`の`Name`プロパティに`OneWay`バインディングされています。これにより、テキストボックスはデータモデルの値を表示しますが、ユーザーがテキストを編集してもデータモデルには反映されません。`OneWay`バインディングを使用することで、テキストボックスは読み取り専用として機能します。ユーザーがテキストを変更しても、データモデルには変更が反映されないため、事実上、読み取り専用となります。
2024.05.19
`IsReadOnly`プロパティを使用せずに、読み取り専用のテキストボックスを作成する方法はいくつかあります。ここでは、`TextBlock`を使用する方法と、`TextBox`のスタイルを変更する方法を紹介します。### 方法1: TextBlockを使用する`TextBlock`を使用すると、データの表示のみが可能で、ユーザーが編集できないようにすることができます。```xml<Window x:Class="ReadOnlyTextBoxSample.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"> <Window.DataContext> <local:MainViewModel /> </Window.DataContext> <Grid> <TextBlock Text="{Binding Name}" Width="200" Height="30" Margin="10" VerticalAlignment="Center" HorizontalAlignment="Center"/> </Grid></Window>```### 方法2: TextBoxのスタイルを変更する`TextBox`を使用しながら、見た目や操作を制限するためにスタイルを適用する方法です。1. `TextBox`を無効化しつつ、スタイルで見た目を調整します。```xml<Window x:Class="ReadOnlyTextBoxSample.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"> <Window.DataContext> <local:MainViewModel /> </Window.DataContext> <Grid> <TextBox Text="{Binding Name}" IsEnabled="False" Width="200" Height="30" Margin="10"/> </Grid></Window>```2. スタイルを適用して、無効状態でも通常の見た目にする。```xml<Window x:Class="ReadOnlyTextBoxSample.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"> <Window.Resources> <Style x:Key="ReadOnlyTextBoxStyle" TargetType="TextBox"> <Setter Property="IsHitTestVisible" Value="False"/> <Setter Property="BorderBrush" Value="Transparent"/> <Setter Property="Background" Value="{x:Null}"/> <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> </Style> </Window.Resources> <Window.DataContext> <local:MainViewModel /> </Window.DataContext> <Grid> <TextBox Text="{Binding Name}" Style="{StaticResource ReadOnlyTextBoxStyle}" Width="200" Height="30" Margin="10"/> </Grid></Window>```### 説明- **TextBlockを使用する方法**: `TextBlock`は基本的に読み取り専用のテキスト表示コントロールです。データバインディングを使ってテキストを表示できますが、ユーザーが直接編集することはできません。- **TextBoxのスタイルを変更する方法**: `TextBox`を無効化 (`IsEnabled="False"`) することでユーザー入力を禁止し、スタイルを適用して見た目を通常のテキストボックスと同じにすることで、ユーザーにとって違和感のない表示を実現します。また、`IsHitTestVisible`を`False`に設定することで、テキストボックスの編集を防ぎます。どちらの方法も、読み取り専用のテキストボックスを作成するための有効な手段です。目的に応じて適切な方法を選んでください。
2024.05.19
C#でWPFアプリケーションを作成し、読み取り専用のテキストボックスを表示する場合、テキストボックスの`IsReadOnly`プロパティを使用します。以下に、MVVMパターンを使用して読み取り専用のテキストボックスを表示するサンプルコードを示します。### プロジェクトの構成1. **Model**: データの定義。2. **ViewModel**: データとビジネスロジックの管理。3. **View**: UIの定義。### 1. Modelモデルはシンプルなクラスで、特に変更通知プロパティが必要な場合は`INotifyPropertyChanged`を実装します。```csharpusing System.ComponentModel;namespace ReadOnlyTextBoxSample{ public class Person : INotifyPropertyChanged { private string _name; public string Name { get { return _name; } set { if (_name != value) { _name = value; OnPropertyChanged(nameof(Name)); } } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }}```### 2. ViewModelビューモデルはモデルをラップし、UIとのバインディングを提供します。```csharpusing System.ComponentModel;namespace ReadOnlyTextBoxSample{ public class MainViewModel : INotifyPropertyChanged { private Person _person; public MainViewModel() { _person = new Person { Name = "John Doe" }; // 初期値設定 } public string Name { get { return _person.Name; } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }}```### 3. ViewXAMLでUIを定義し、読み取り専用のテキストボックスを設定します。```xml<Window x:Class="ReadOnlyTextBoxSample.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"> <Window.DataContext> <local:MainViewModel /> </Window.DataContext> <Grid> <TextBox Text="{Binding Name}" IsReadOnly="True" Width="200" Height="30" Margin="10"/> </Grid></Window>```### 4. MainWindowコードビハインドコードビハインドは基本的に自動生成された部分だけです。```csharpusing System.Windows;namespace ReadOnlyTextBoxSample{ public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } }}```### 説明- **Model**: `Person`クラスは名前を保持し、変更通知を行います。- **ViewModel**: `MainViewModel`クラスは、`Person`オブジェクトを管理し、`Name`プロパティを公開します。- **View**: XAMLで定義された`TextBox`は、`MainViewModel`の`Name`プロパティにバインドされています。`IsReadOnly="True"`を設定することで、テキストボックスが読み取り専用になります。この構成により、`TextBox`に表示された名前は読み取り専用となり、ユーザーが編集できない状態で表示されます。
2024.05.19
C#でWPFアプリケーションをMVVMパターンで構築する場合、テキストボックスの入力や変更をバインディングで管理します。以下は、基本的なMVVMパターンを使用してテキストボックスの入力をバインディングするサンプルコードです。### プロジェクトの構成1. **Model**: データの定義。2. **ViewModel**: データとビジネスロジックの管理。3. **View**: UIの定義。### 1. Modelモデルはシンプルなクラスで、特に変更通知プロパティが必要な場合は`INotifyPropertyChanged`を実装します。```csharpusing System.ComponentModel;namespace WpfAppSample{ public class Person : INotifyPropertyChanged { private string _name; public string Name { get { return _name; } set { if (_name != value) { _name = value; OnPropertyChanged(nameof(Name)); } } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }}```### 2. ViewModelビューモデルはモデルをラップし、UIとのバインディングを提供します。```csharpusing System.ComponentModel;namespace WpfAppSample{ public class MainViewModel : INotifyPropertyChanged { private Person _person; public MainViewModel() { _person = new Person(); } public string Name { get { return _person.Name; } set { if (_person.Name != value) { _person.Name = value; OnPropertyChanged(nameof(Name)); } } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }}```### 3. ViewXAMLでUIを定義し、バインディングを設定します。```xml<Window x:Class="WpfAppSample.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"> <Window.DataContext> <local:MainViewModel /> </Window.DataContext> <Grid> <TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" Width="200" Height="30" Margin="10"/> </Grid></Window>```### 4. MainWindowコードビハインドコードビハインドは基本的に自動生成された部分だけです。```csharpusing System.Windows;namespace WpfAppSample{ public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } }}```### 説明- **Model**: `Person`クラスは名前を保持し、変更通知を行います。- **ViewModel**: `MainViewModel`クラスは、`Person`オブジェクトを管理し、プロパティ変更を通知します。- **View**: XAMLで定義された`TextBox`は、`MainViewModel`の`Name`プロパティにバインドされています。`UpdateSourceTrigger=PropertyChanged`は、テキストが変更されるたびにプロパティを更新することを指定します。これにより、テキストボックスに入力された内容が即座に`ViewModel`の`Name`プロパティに反映され、逆もまた同様です。
2024.05.19
WPF の RichTextBox では、行間を直接設定するプロパティは提供されていませんが、いくつかの方法で行間を調整することができます。その一つは、段落のスタイルを変更することです。以下のサンプルコードでは、行間を調整するために段落のマージンを設定しています。これにより、見た目上の行間が変更されます。```csharpusing System.Windows;using System.Windows.Controls;using System.Windows.Documents;namespace WpfApp{ public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); SetRichTextBoxLineSpacing(5); // 行間を5に設定 } private void SetRichTextBoxLineSpacing(double spacing) { // RichTextBox 内のすべての段落の行間を設定します Paragraph paragraph = new Paragraph(); paragraph.Margin = new Thickness(0, spacing, 0, 0); richTextBox.Document.Blocks.Add(paragraph); } }}```XAML ファイルには、RichTextBox を配置しておきます。```xml<Window x:Class="WpfApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="450" Width="800"> <Grid> <RichTextBox x:Name="richTextBox" HorizontalAlignment="Left" VerticalAlignment="Top" Height="200" Width="300"/> </Grid></Window>```この例では、行間を調整するための `SetRichTextBoxLineSpacing` メソッドを作成し、それをコンストラクタで呼び出しています。`SetRichTextBoxLineSpacing` メソッドでは、新しい段落を作成し、その段落の上部にマージンを設定することで行間を調整しています。`spacing` パラメータを調整することで、行間のサイズを変更できます。
2024.05.03
C# WPF で RichTextBox のテキストを取得するためには、RichTextBox の内容を操作する方法を利用します。以下は、RichTextBox のテキストを取得するためのサンプルコードです。```csharpusing System.Windows;using System.Windows.Controls;namespace WpfApp{ public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Button_Click(object sender, RoutedEventArgs e) { // RichTextBox のテキストを取得します string text = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd).Text; MessageBox.Show(text); } }}```XAML ファイルには、RichTextBox と Button を配置しておきます。```xml<Window x:Class="WpfApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="450" Width="800"> <Grid> <RichTextBox x:Name="richTextBox" HorizontalAlignment="Left" VerticalAlignment="Top" Height="200" Width="300"/> <Button Content="Get Text" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="320,10,0,0" Click="Button_Click"/> </Grid></Window>```この例では、ボタンがクリックされると、RichTextBox の内容が取得されてメッセージボックスに表示されます。 TextRange クラスを使用して、RichTextBox の内容を取得しています。
2024.05.03
Crystal Reports を C# で使用する方法を理解することは、一般的な .NET アプリケーションでレポートの作成と表示を行うための重要なスキルです。Crystal Reports を使用するためには、まず Crystal Reports をインストールしておく必要があります。そして、Visual Studio で Crystal Reports を使えるようにするためのツールや拡張機能をインストールする必要があります。Crystal Reports を使用するための基本的な手順は次の通りです。1. **Crystal Reports のインストール**: Crystal Reports の最新バージョンをダウンロードし、インストールします。インストール時には、Visual Studio との統合も行われるはずです。2. **Visual Studio プロジェクトの作成**: Crystal Reports を使用するための新しい C# プロジェクトを Visual Studio で作成します。3. **Crystal Reports レポートの作成**: Visual Studio のメニューやツールボックスから Crystal Reports を選択し、新しいレポートを作成します。この段階で、データソースを指定し、レポートのデザインを行います。4. **C# コードでの Crystal Reports の使用**: C# コードから Crystal Reports を呼び出して、必要なデータを渡し、レポートを表示します。以下は、C# で Crystal Reports を使用する基本的な例です。```csharpusing CrystalDecisions.CrystalReports.Engine;using CrystalDecisions.Shared;namespace CrystalReportDemo{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // Crystal Report ファイルのパスを指定します ReportDocument reportDocument = new ReportDocument(); reportDocument.Load("path_to_your_report_file.rpt"); // データソースの設定 // 例えば、データベースからデータを取得してレポートに表示する場合 // DataTable dataTable = GetDataFromDatabase(); // reportDocument.SetDataSource(dataTable); // CrystalReportViewer にレポートを表示します crystalReportViewer1.ReportSource = reportDocument; } }}```この例では、Crystal Reports ファイルのパスを指定し、必要に応じてデータソースを設定しています。そして、CrystalReportViewer コントロールにレポートを表示しています。データソースの設定方法は、データベースからのデータ取得や、オブジェクトのリストなど、使用するデータに応じて異なります。これで、Crystal Reports を使用して C# アプリケーションでレポートを作成し、表示する基本的な手順がわかりました。
2024.05.03
全11件 (11件中 1-11件目)
1