🐕 C# 学習 (9日目) 補習 学習中の疑問解決とモーダル表示
作成日: 2023/01/20
0

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;
            }
        }
    }
}

実行結果

  1. テキストボックスに入力した
    modal1.png

  2. ボタンを押し、モーダルが開いた
    modal2.png

今回残した課題

  • 実はモーダルのFormはフォームデザイナーから作ってないのでその方法も習得したい
  • 文字列連結の方法も数えるほどなので、すべて覚えたい

次回は・・・

次回は、
今まで9日間学習したことと、本日の補習で学習した内容をベースに
習作を作って
本当のC#学習の最後日にしたいと思います


これからゲームアプリとWindowsアプリを作りたい初心者です。 ゲームアプリとWindowsアプリ、共に経験ゼロです。 これからの体験が少しでも参考になれば幸いです。 目指す事 ・C言語学習→C#学習 ・Unity (C#) の勉強 ・Unityゲーム作成 ・Windowsアプリ(C#) 作成