C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: 子フォーム上にユーザーが生成したTextBox等の保存


(過去ログ 100 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■60043 / inTopicNo.1)  子フォーム上にユーザーが生成したTextBox等の保存
  
□投稿者/ ラムダ (16回)-(2011/06/16(Thu) 22:06:19)

分類:[C#] 

いつもお世話になっております! Visual Studio2005 C#
大変困っております。。。

実行中の子フォーム上にユーザーが任意でTextBoxやPictureBoxを作成し、
その子フォーム上にあるTextBoxやPictureBoxを保存したいのですが、
検索をかけても子フォームの位置やサイズを保存しておく(Properties.Settings.Default.Save()・Properties.Settings.Default.Reload())、
というのは見つかるのですが、したい事を実装する方法がなかなか見つかりません。。。

下記がイメージです。

                        ↓親フォーム(親フォーム上に子フォームがあります)
 ---------------------------------
|     子フォーム       |          |
|                      |   ----   |
|                      |  |テキスト|  | ←TextBox用ボタン
|                      |   ----   |
|                      |   -----  |
|                      |  |ピクチャ| | ←PictureBox用ボタン
|                      |   -----  |
|                      |          |
|                      |          |
|----------------------           |
|                                 |
|  ----                   ----    |
| |開く|                 |保存|   | ←「開く」(保存した内容を子フォームへ反映)
|  ----                   ----    | ←「保存」(現在の子フォームの内容を保存)
 ---------------------------------

例)親フォームのテキストボタンを押下すると子フォームへ任意の範囲指定をして、子フォームへテキストボックスを追加します。
(MouseDown、MouseUpで範囲指定をして追加)

テキストボックスが3つ5つ作成されることもあれば作成されないこともあります。

子フォームにTextBoxが3つ存在したとして、それぞれのTextBoxの位置・サイズ・内容を「保存」ボタンを押下した時に保存しておいて、
「開く」ボタンで参照し、保存した内容を子フォームへ表示させたいのです。。。

引用返信 編集キー/
■60044 / inTopicNo.2)  Re[1]: 子フォーム上にユーザーが生成したTextBox等の保存
□投稿者/ επιστημη (2632回)-(2011/06/16(Thu) 22:18:48)
επιστημη さんの Web サイト
何に困っているのかわかんないんですけど。

「それぞれのTextBoxの位置・サイズ・内容を「保存」ボタンを押下した時に保存」すりゃいぃんじゃないすか?

引用返信 編集キー/
■60046 / inTopicNo.3)  Re[2]: 子フォーム上にユーザーが生成したTextBox等の保存
□投稿者/ ラムダ (17回)-(2011/06/16(Thu) 22:48:02)
No60044 (επιστημη さん) に返信
> 何に困っているのかわかんないんですけど。
> 
> 「それぞれのTextBoxの位置・サイズ・内容を「保存」ボタンを押下した時に保存」すりゃいぃんじゃないすか?
> 

たしかにそうなんですけども。。。
最初から子フォーム上にTextBoxがあるのではなく、
デバッグの実行中にTextBox[n]を任意で生成する場合、現在のTextBox[n]の位置などを取得っていうのができなくて。。。

TextBox・PictureBox生成のコードです。

        public void Form2_MouseUp(object sender, MouseEventArgs e)
        {
            //マウスの左ボタンの確認
            if (e.Button == MouseButtons.Left)
            {
                ControlPaint.DrawReversibleFrame(theRectangle, this.BackColor, FrameStyle.Dashed);

                //ドラッグ終了位置
                EndPoint = e.Location;

                //開始位置-終了位置内でオブジェクトの表示
                int int_Size_X = EndPoint.X - StartPoint.X;
                int int_Size_Y = EndPoint.Y - StartPoint.Y;

                switch (int_flag)
                {
                    case 1: //TextBox
                        textbox1[int_textboxCount] = new TextBox();
                        textbox1[int_textboxCount].Name = "textbox" + int_textboxCount;
                        textbox1[int_textboxCount].Location = StartPoint;
                        textbox1[int_textboxCount].Size = new Size(int_Size_X, int_Size_Y);
                        textbox1[int_textboxCount].Multiline = true;
                        textbox1[int_textboxCount].Text = textbox1[int_textboxCount].Name;
                        this.Controls.Add(textbox1[int_textboxCount]);
                        int_textboxCount++;
                        int_flag = 0;
                        break;

                    case 2: //PictureBox
                        imagebox = new PictureBox();
                        imagebox.Location = StartPoint;
                        imagebox.Size = new Size(int_Size_X, int_Size_Y);
                        imagebox.BorderStyle = BorderStyle.FixedSingle;
                        openFileDialog1.InitialDirectory = @"C:\Users\user\Desktop\";
                        openFileDialog1.Filter = "イメージファイル(*.png)|*.png|" + "すべてのファイル (*.*)|*.*";
                        openFileDialog1.CheckFileExists = true;
                        openFileDialog1.CheckPathExists = false;
                        DialogResult result = openFileDialog1.ShowDialog();
                        if (result == DialogResult.OK)
                        {
                            //OpenSomeFile(openFileDialog1.FileName);
                            Console.WriteLine(openFileDialog1.FileName);
                        }
                        else
                        {
                            int_flag = 0;
                            break;
                        }
                        Size size = new Size(int_Size_X, int_Size_Y);
                        Bitmap image = new Bitmap(openFileDialog1.FileName);
                        imagebox.SizeMode = PictureBoxSizeMode.StretchImage;
                        imagebox.Image = image;
                        this.Controls.Add(imagebox);
                        int_flag = 0;
                        break;
                }
                theRectangle = new Rectangle(0, 0, 0, 0);
            }

引用返信 編集キー/
■60047 / inTopicNo.4)  Re[3]: 子フォーム上にユーザーが生成したTextBox等の保存
□投稿者/ επιστημη (2634回)-(2011/06/16(Thu) 23:23:00)
επιστημη さんの Web サイト
> デバッグの実行中にTextBox[n]を任意で生成する場合、現在のTextBox[n]の位置などを取得っていうのができなくて。。。

...なんで? Point loc = textbox1[n].Location; で取得できませんか?


引用返信 編集キー/
■60048 / inTopicNo.5)  Re[4]: 子フォーム上にユーザーが生成したTextBox等の保存
□投稿者/ ラムダ (19回)-(2011/06/16(Thu) 23:46:50)
No60047 (επιστημη さん) に返信
>>デバッグの実行中にTextBox[n]を任意で生成する場合、現在のTextBox[n]の位置などを取得っていうのができなくて。。。
> 
> ...なんで? Point loc = textbox1[n].Location; で取得できませんか?
> 
> 
説明下手ですみません。。。
先ほどのコード内では取得できるのですが。。。

        public Point loc;
        public void Form2_MouseUp(object sender, MouseEventArgs e)
        {  
                    //省略
                    case 1:
                        textbox1[int_textboxCount] = new TextBox();
                        textbox1[int_textboxCount].Name = "textbox" + int_textboxCount;
                        textbox1[int_textboxCount].Location = StartPoint;
                        textbox1[int_textboxCount].Size = new Size(int_Size_X, int_Size_Y);
                        textbox1[int_textboxCount].Multiline = true;
                        textbox1[int_textboxCount].Text = textbox1[int_textboxCount].Name;
                        this.Controls.Add(textbox1[int_textboxCount]);

                        loc = textbox1[int_textboxCount].Location; //取得できる。(確認済)

                        int_textboxCount++;
                        int_flag = 0;
                        break;
                     //省略
        }

ですが、同じ子フォーム内なのに値が消えます。。。
        public void SaveForm()
        {
            MessageBox.Show("loc = " + loc); //消える。。。
            //省略
        }

親フォームのボタンを押下することで SaveForm() へ移るのですが、親フォームに戻ると子フォームの変数が初期化されるのでしょうか。。。

        //保存ボタン押下時
        private Form2 form2 = new Form2();
        private void button1_Click(object sender, EventArgs e)
        {
            form2.SaveForm();
        }

引用返信 編集キー/
■60049 / inTopicNo.6)  Re[5]: 子フォーム上にユーザーが生成したTextBox等の保存
□投稿者/ επιστημη (2635回)-(2011/06/16(Thu) 23:52:04)
επιστημη さんの Web サイト
2011/06/16(Thu) 23:56:39 編集(投稿者)

> 親フォームのボタンを押下することで SaveForm() へ移るのですが、親フォームに戻ると子フォームの変数が初期化されるのでしょうか。。。
>
> //保存ボタン押下時
> private Form2 form2 = new Form2();
> private void button1_Click(object sender, EventArgs e)
> {
> form2.SaveForm();
> }

親フォームにある(画面に現れている)Form2と上記のform2とは同一ですか?
それともForm2という同じ名前の別物ですか?

# ウチに遊びに来てるお隣さんちのわんこにエサあげてもうちのわんこは喜びませんけど

引用返信 編集キー/
■60050 / inTopicNo.7)  Re[6]: 子フォーム上にユーザーが生成したTextBox等の保存
□投稿者/ ラムダ (21回)-(2011/06/17(Fri) 00:09:43)
No60049 (επιστημη さん) に返信
> 
> 
> 親フォームにある(画面に現れている)Form2と上記のform2とは同一ですか?
> それともForm2という同じ名前の別物ですか?
> 
親フォームはForm1で、子フォームがForm2となっていますが。。。

すみません、コピーの為にコードを見ましたら Form2 を2箇所記述していました。。。

    public partial class Form1 : Form
    {
        public Form2 form2 = new Form2(); // <==これが原因だったようです。。。
        public Form2 cFormChild1 = new Form2();

        public Form1()
        {
            InitializeComponent();
            cFormChild1.MdiParent = this;
            cFormChild1.int_flag = int_i;
            cFormChild1.Show();
        }
        //省略
        private void button1_Click(object sender, EventArgs e)
        {
            //form2.SaveForm();
            cFormChild1.SaveForm(); // <== こちらに変換しました!
        }
    }

先ほどのメッセージボックスで値が取れました!

        public void SaveForm()
        {
            MessageBox.Show("loc = " + loc); //消える。。。 <=== 取得できました!
            //省略
        }

別物になっていました。。。
ホントすみません。。。
気づかせていただき、ありがとうございます!

解決済み
引用返信 編集キー/
■60051 / inTopicNo.8)  Re[7]: 子フォーム上にユーザーが生成したTextBox等の保存
□投稿者/ επιστημη (2636回)-(2011/06/17(Fri) 00:13:42)
επιστημη さんの Web サイト
おめでとさんです。

> 別物になっていました。。。

そゆわけで、エサもらって喜んでたのはお隣さんちのわんこでした、と。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -