忍者ブログ
ブログに書かれている内容は、リアルで喋っちゃ駄目だぞっ!
[607] [606] [605] [604] [603] [601] [600] [596] [595] [594] [593]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

マビノギのバナーCM、何を言ってるのか分かりません><


■C# フォームのテキストを動的に生成・更新

C#の.NETで何かゲームなんかを作ろうと思った場合、ちょっと考えるだけでも

引っかかる部分がありました。

それが、ウインドウに表示する画像やテキストの表示切り替えです。

例えばノベルゲーなんかで、画面下側でテキストが表示されて決定ボタンを押すと

前のテキストが消えて次のテキストが表示されますよね。

テキスト更新する処理をするときにコントロール名(label1、lavel2など)を指定しなきゃいけませんが

画面には複数の種類のコントロールを扱わなければいけません。

メニュー画面で表示するテキストエリア、通常画面で表示するテキストエリア……

これらを表示するためにコントロールを最初から1つ1つ定義するのは、非効率的です。

最初から表示する数が分かっていれば良いのですが、表示するコントロール数が不明である以上、

画面の種類ごとにテンプレ化し、動的に生成する必要が出てきます。


そのため、今回は画面にテキストを表示するlabelのテキストデータと座標を作成・更新する関数を作成してみました。

        using System.Reflection;

        //ラベルのテキストと座標を作成・更新
        //第1引数 ラベル名称、第2引数 テキスト
        //第3引数 X座標、第4引数 Y座標
        public void changeLabel(string labelName,string textString,int x,int y)
        {
            //ラベル新規作成
            if (!this.Controls.ContainsKey(labelName))
            {
                Assembly assemb = typeof(Control).Assembly;
                Control ctrl = (Control)assemb.CreateInstance("System.Windows.Forms.Label");

                ctrl.Name = labelName;
                ctrl.Text = textString;
                ctrl.Location = new Point(x,y);
                ctrl.Visible = true;
                this.Controls.Add(ctrl);
            }

            //ラベル更新
            else if (this.Controls.ContainsKey(labelName))
            {
                Control[] ctrl = this.Controls.Find(labelName,false);

                if (textString.Length > 0)
                {
                    ctrl[0].Text = textString;
                    ctrl[0].Location = new Point(x, y);
                    ctrl[0].Visible = true;
                }
            }
        }

※この関数はForm1.csに作成


この関数では、ラベル名をstring型で指定し、コントロール上に存在しなければ新規で作成し、

既に存在していればラベルに表示するテキストデータと座標を更新します。

・使用例
for(int x=0; x<200; x++)
{
  changeLabel("scroll_Text", "スクロール文字",x ,200);
  System.Threading.Thread.Sleep(100);
}



新規作成はそれっぽいソースが見つかったのですが、既に存在するラベルを更新する場合の処理の書き方が分からず

結構時間がかかってしまいました(汗)

更新処理の方で使っているcontrols.Findメソッドの型が配列になってるのが、未だよく分かりません。

何で?
PR
KKK(きっときっと楓ちゃん)
当ブログは、shuffle!に登場する楓ちゃんを応援しています。
ブログ内検索
アクセス解析
最新コメント
[05/01 盥]
[02/27 めそ…あ、いや、何でもない]
[11/27 レオン]
名雪かわいいよ、名雪

忍者ブログ | [PR]

Design by Dress
Material by tudu*uzu