C# 学習9日目 補習 学習中の疑問解決とモーダル表示
今回学習中、これどうだったけ? C#でできるの?って思った事を調べてまとめました。
調べたことは次の通りです。
大雑把には次の通りです。
- 学習中、これどうだったけ? C#でできるの?って思った事
- 本に書いてなく、すでに調べたけど、忘れてしまいそうな事
- MessageBox表示ではなくモーダル画面表示をしてみたい
具体的には次の事を調べました
- C#のシンプルな文字連結方法
- ディレクトリ指定をパスの直書きではなく、カレントディレクトリにしたい
- 本にはJpeg、BMPを読み込む例があったが、PNG画像はできる?
プラスして
- ボタンを押すとモーダル画面を開き、元画面のパラメータをモーダルに渡したい
- 最後に本日の学習(補習)内容でサンプルを作ります
C#のシンプルな文字連結方法
C#ではいろいろな文字列連結方法があります。が、とりあえずはこの3つで何とかする。
残りは、後々覚えます。
+でつなぐ
string str = "C#学習" + "9日目";
StringBuilderクラス Append()メソッド
StringBuilderは、他にも文字列操作メソッドを備えていて、処理も高速。
string str1 = "本日の";
string str2 = "学習";
StringBuilder sb = new StringBuilder();
sb.Append(str1);
sb.Append(str2);
string str3 = sb.ToString();
Stringクラス Concat()メソッド
string str4 = "これも";
string str5 = "感覚的にシンプル";
string str6 = String.Concat(str4, str5);
カレントディレクトリを取得する
System.Reflection.Assembly.GetExecutingAssembly().Locationを使い、
ディレクトリ名までのパスを取得。
//クラスの外で、using System.Reflection;を記述しています
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
他にもいろいろな取得方法があるようです。
png画像を取り込むには?
例題ではBMP, jpegとかが多いので、よくどうだっけ?となりますが、
同様にImage.FromFile()で読み込めます。
すでに学習2日目で試していました。
PictureBox pb = new PictureBox();
pb.Image = Image.FromFile("f:\\images\\bus1.png");
ボタンを押すとモーダル画面を開く(パラメーターも渡す)
モーダル画面の特徴
モーダル表示は、モーダルを閉じるまで、元画面を操作できないという特徴がある。
またMessageBoxと違い、カスタマイズ性に優れている。
モーダル(ModalForm)の実装方法
インスタンス作成をしているところでパラメーターを渡すようにする。
元画面側
ModalForm modal = new ModalForm(textBox1.Text);
modal.ShowDialog();
モーダル側
public partial class ModalForm : Form
{
public ModalForm(string textBoxValue) {
//モーダル画面の設定
this.Text = "モーダル表示";
this.Width = 400;
this.Height = 200;
//ラベル
Label mLabel = new Label();
mLabel.Top = 50;
mLabel.Left = 50;
mLabel.Text = textBoxValue;
mLabel.Parent = this;
}
}
本日学習したこと全部を前回のサンプルに盛り込んでみる
本日学習したこと全部を前回のサンプルに盛り込んでみます。
前回のサンプルは、Windows Form アプリから新規プロジェクト作成をして、
フォームデザイナーから作ったイベント処理の確認サンプルでした。
テキストボックスに文字を入力し、右のボタンを押すと、
モーダルダイアログが開き、入力した文字と、背景画像を表示します。
背景画像は実行ファイルと同じディレクトリのimagesフォルダの中に入っています。
サンプルソース
using System.Reflection;
namespace WinFormsAppSample_1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// label1.Text = ((Button)sender).Text;
// label2.Text = ((Button)sender).Name;
}
private void button2_Click(object sender, EventArgs e)
{
// label1.Text = ((Button)sender).Text;
// label2.Text = ((Button)sender).Name;
}
private void button3_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(textBox1.Text))
{
MessageBox.Show("テキストボックスが未入力です。", "アラート");
} else
{
ModalForm modal = new ModalForm(textBox1.Text);
modal.ShowDialog();
}
}
private void buttons_Click(object sender, EventArgs e)
{
label1.Text = ((Button)sender).Text;
label2.Text = ((Button)sender).Name;
}
public partial class ModalForm : Form
{
public ModalForm(string textBoxValue) {
//モーダル画面の設定
this.Text = "モーダル表示";
this.Width = 400;
this.Height = 200;
//カレントディレクトリ内画像フォルダの画像を背景画像にする
this.BackgroundImage =
Image.FromFile((Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)) + "\\images\\bg.png");
//ラベル
Label mLabel = new Label();
mLabel.Top = 50;
mLabel.Left = 50;
mLabel.Text = textBoxValue;
mLabel.Parent = this;
}
}
}
}
実行結果
-
テキストボックスに入力した
-
ボタンを押し、モーダルが開いた
今回残した課題
- 実はモーダルのFormはフォームデザイナーから作ってないのでその方法も習得したい
- 文字列連結の方法も数えるほどなので、すべて覚えたい
次回は・・・
次回は、
今まで9日間学習したことと、本日の補習で学習した内容をベースに
習作を作って、
本当のC#学習の最後日にしたいと思います