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

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

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

Re[2]: 置き換え機能を作成しているのですが


(過去ログ 27 を表示中)

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

■12620 / inTopicNo.1)  置き換え機能を作成しているのですが
  
□投稿者/ san (4回)-(2008/01/13(Sun) 10:12:52)

分類:[C#] 

メモ書きや編集ができるアプリのサンプルで勉強中のものです。
置き換え機能を作成している部分ですが  

置き換えを実行した後にExchangeFormを破棄するのはなぜなのでしょか?


 ●  //置き換えボタンを押したときの処理
        private void 置き換えToolStripMenuItem_Click(object sender, EventArgs e)
        {//form3のインスタンスを作成
            Form3  ExchangeForm= new Form3();
            //ExchangeFormを表示
            ExchangeForm.ShowDialog();
            //置き換え前の単語
            string exchange_before;
            //置き換え後の単語
            string exchange_after;

            //textBox1textのプロパティのgetアクセサを呼び出して値を取得
            exchange_before = ExchangeForm.TextBox1text;
            //textbox2textのプロパティのgetアクセサを呼び出して値を取得
            exchange_after = ExchangeForm.Textbox2text;
    
    if (exchange_before != "" && exchange_after != "")
            {//置き換えを実行
                textBox1.Text = textBox1.Text.Replace(exchange_before, exchange_after);
            }
            // ExchangeFormを破棄
   ここです→        // ExchangeForm.Dispose();

        }



●namespace MyMemo
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
        //置き換え前の単語を受け渡しするためのプロパティ
        public string TextBox1text
        {
            get
            {
                return textBox1.Text;
            }
            set
            {
                textBox1.Text = value;
            }
        }
        //置き換え後の単語を受け渡しするためのプロパティ
        public string Textbox2text
        {
            get
            {
                return textBox2.Text;
            }
            set
            {
                textBox2.Text = value;
            }
        }
        //置き換えボタンを押したときの処理
        private void button1_Click(object sender, EventArgs e)
        {//置き換え前か置き換え後の単語が指定されずに検索ボタンが押されたらメッッセージボックスを表示
            if (textBox1.Text == "" || textBox2.Text == "")
            {
                MessageBox.Show("置き換え前の単語と置き換え後の単語を入力してください");
            }
            else
            {//TextBox1textプロパティに値を渡す
                TextBox1text = textBox1.Text;
                //TextBox2textプロパティに値を渡す
                Textbox2text = textBox2.Text;


                //このフォームを隠す
                this.Hide();
            }
        }
    }
}

引用返信 編集キー/
■12621 / inTopicNo.2)  Re[1]: 置き換え機能を作成しているのですが
□投稿者/ 774RR (117回)-(2008/01/13(Sun) 10:39:14)
えーっと・・・ その Dispose は *置き換え* 自体とは何の関係もないの判ってる?
new した以上はどこかで Dispose しなきゃならん、というただそれだけ。
Form3 は Dialog つまり unmanaged resource をつかうからそれを処分するっつーこと。
引用返信 編集キー/
■12622 / inTopicNo.3)  Re[1]: 置き換え機能を作成しているのですが
□投稿者/ Tom Yama (8回)-(2008/01/13(Sun) 10:52:55)
No12620 (san さん) に返信
> 置き換えを実行した後にExchangeFormを破棄するのはなぜなのでしょか?
はあ?このコード、あなたが書いたんじゃないの?

> メモ書きや編集ができるアプリのサンプルで勉強中のものです。
その「サンプル」の出典を明らかにしなきゃ、「質問」にならないでしょ?

引用返信 編集キー/
■12625 / inTopicNo.4)  Re[1]: 置き換え機能を作成しているのですが
□投稿者/ Azulean (6回)-(2008/01/13(Sun) 11:36:02)
Formはアンマネージリソースを持つので、Dispose(破棄)すべきです。
しかし、"置き換え実行後"である必要はありません。
また、using構文を使うのも一手だと思います。

string exchange_before;
string exchange_after;

using (Form3 ExchangeForm = new Form3())
{
 ExchangeForm.ShowDialog(); // キャンセルがない?
 exchange_before = ExchangeForm.TextBox1text;
 exchange_after = ExchangeForm.Textbox2text;
}
if (exchange_before != "" && exchange_after != "")
{
 textBox1.Text = textBox1.Text.Replace(exchange_before, exchange_after);
}

※usingのスコープを抜けるときにDisposeが行われます
引用返信 編集キー/
■12627 / inTopicNo.5)  Re[2]: 置き換え機能を作成しているのですが
□投稿者/ san (5回)-(2008/01/13(Sun) 14:47:18)
No12625 (Azulean さん) に返信
> Formはアンマネージリソースを持つので、Dispose(破棄)すべきです。
> しかし、"置き換え実行後"である必要はありません。
> また、using構文を使うのも一手だと思います。
>
> string exchange_before;
> string exchange_after;
>
> using (Form3 ExchangeForm = new Form3())
> {
>  ExchangeForm.ShowDialog(); // キャンセルがない?
>  exchange_before = ExchangeForm.TextBox1text;
>  exchange_after = ExchangeForm.Textbox2text;
> }
> if (exchange_before != "" && exchange_after != "")
> {
>  textBox1.Text = textBox1.Text.Replace(exchange_before, exchange_after);
> }
>
> ※usingのスコープを抜けるときにDisposeが行われます

有り難うございました。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -