176465 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

風来の森いろいろ日記

風来の森いろいろ日記

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X
Feb 11, 2024
XML
カテゴリ:C# VB

今回はC#で独自のメッセージボックスを作ります。
今回の独自のメッセージボックスはフォームを作って表現します。
会社でタブレットやタッチパネルモニタ用のプログラムを作っていますが、通常のメッセージボックスだと小さくてボタンが押しづらいとか、文字が細かくて見づらいとか文句がでるので、わりと使うことが多いです。

別のフォームを作り、それを呼び出して、そのフォームに配置したテキストボックスにテキストを送ります。もう一つは、別のフォームにボタンを配置し、それぞれのテキストに「YES」「NO」を設定し、それを選ぶと呼び出し元に結果を返すというものです。




まずはフォームを三つ用意します。
一つはメインのフォームで、ここから独自メッセージボックスを呼び出します。
これをForm1とします。下のようにフォームにボタン二つとテキストボックス二つ配置します。


次にメッセージを表示するフォームを作ります。これをForm2とします。
ここにはテキストボックスとフォームを閉じるためのボタンを配置します。
今回はテキストボックスはMultlineをTrue、ModifireをPublicにします。

Modifiresを必ずPublicにしてください。


最後に「Yes」「No」選択用のフォームを作ります。これはForm3とします。
ボタンを二つ配置し、わかりやすくボタンのテキストを「Yes」「No」にします。


今回はフォームを3つ作って、別のフォームのコントールを操作する処理がありますが、これに関する詳しい説明は​DOBONさん​をご覧ください。今回この辺りの処理を簡略化しています。



まずForm1のコードを書きます。


 public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)

        {

            //任意のメッセージを自作メッセージボックスに送る

            //メッセージ表示用のフォームを開く

            Form2 form2 = new Form2();

            //メッセージ用フォームにテキストを設定する(Form1のtextBox1.Text)

            form2.textBox1.Text = this.textBox1.Text;

            form2.ShowDialog();

        }

        private void button2_Click(object sender, EventArgs e)

        {

            Form3 form3 = new Form3();

            DialogResult result = form3.ShowDialog();

            textBox2.Text = result.ToString();

            if (result == DialogResult.Cancel) { textBox2.Text = "選択されなかった"; }

        }

    }



次はForm2のコードですが、ここは閉じるボタンを押したらフォームを閉じるだけです。

    public partial class Form2 : Form

    {

        public Form2()

        {

            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)

        {
    //閉じるボタンを押したらフォームを閉じる

            this.Close();

        }

    }


最後にForm3です。

    public partial class Form3 : Form

    {

        public Form3()

        {

            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)

        {

            //Yesボタンを押したとき

            this.DialogResult = DialogResult.Yes;

        }

        private void button2_Click(object sender, EventArgs e)

        {

            //Noボタンを押した時

            this.DialogResult = DialogResult.No;

        }

    }



文字を表示させる部分は簡単だと思います。
Form1からメッセージ用のForm2を開き、Form2のテキストボックスにForm1のテキストボックスの内容を表示させます。注意するべき点は、Form2のテキストボックスのModifiresをPublicにしておくことです。

            //メッセージ表示用のフォームを開く

            Form2 form2 = new Form2();

            //メッセージ用フォームにテキストを設定する(Form1のtextBox1.Text)

            form2.textBox1.Text = this.textBox1.Text;

            form2.ShowDialog();


YesNoボックスを表示させ結果を得る部分は

      Form3 form3 = new Form3();

            DialogResult result = form3.ShowDialog();

            textBox2.Text = result.ToString();

            if (result == DialogResult.Cancel) { textBox2.Text = "選択されなかった"; }

やり方はいくつかあると思いますが、
DialogResult result = form3.ShowDialog();
この部分がキモです。Form3側で選択した結果がresultに返ります。
結果をForm1のtextBoxのテキストに表示します。
Form3の右上閉じるボタンで閉じた場合はCancelが返るようです。

Form3側はYesとNoのれぞれのボタンのクリック処理に次の処理を書きますが、ボタンを押すとフォームが閉じます。閉じる処理を書いてないのになぜ閉じるのか!?そういうものらしい。

        private void button1_Click(object sender, EventArgs e)

        {

            //Yesボタンを押したとき

            this.DialogResult = DialogResult.Yes;

        }

        private void button2_Click(object sender, EventArgs e)

        {

            //Noボタンを押した時

            this.DialogResult = DialogResult.No;

        }


だいたいこんな感じ。






お気に入りの記事を「いいね!」で応援しよう

Last updated  Feb 11, 2024 04:49:16 PM
コメント(0) | コメントを書く



© Rakuten Group, Inc.
X