none
ボタンのバックカラーやテキストボックスのテキストを変更したが、表示が変わらない RRS feed

  • 質問

  • 度々ですみませんが、もうひとつご教授下さい。

    既に表示済の[Button]の背景色や関連する[TextBox]のテキストを、
    [Button]のイベントで、それらの背景色やテキストを変たいのですが、
    表示が変わりません。

    マウスポイント参照やウオッチでコードの通りとの確認とれております。
    クラスでの場合は正常に表示しました。 メソッド化したらNGになりました。


    Button    btn;
    TextBox  txt;

    void    method()
    {
        btn = new Button();
        btn.BackColor = Color.Black;

        txt = new TextBox();
        txt.Text = "OFF";

        btn.Click += new EventHandler(btn_Click);
        parent.Controls.Add(btn);


    void    btn_Click(object sender, EventArgs e)
    {
        btn.BackColor = Color.Red;
        txt.Text = "ON";

    色々と試してみたのですが・・・、よろしくお願いします。

    2010年8月7日 10:56

回答

  • parent.Controls.Add(btn);
    

    とありますが、提示されたコードはどこに記述したものなんでしょうか?Form を継承したクラス内にですか?

    試しに下のようなコードを書いて実行してみたところ、Buttonの背景色は変わりましたし、TextBoxの文字列も変わりました。

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace ColorSample
    {
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
    
          // コントロールを初期化するメソッドを呼び出す。
          Init();
        }
    
        private Button btn;
        private TextBox txt;
    
        private void Init()
        {
          btn = new Button();
          btn.Text = "click";
          btn.BackColor = Color.Black;
          btn.Location = new Point(10, 10);
          btn.Click+=new EventHandler(btn_Click);
    
          txt = new TextBox();
          txt.Text = "OFF";
          txt.Location = new Point(10, 50);
    
          // フォームに追加
          Controls.Add(btn);
          Controls.Add(txt);
        }
    
        private void btn_Click(object sender, EventArgs e)
        {
          btn.BackColor = Color.Red;
          txt.Text = "ON";
        }
      }
    }
    


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答の候補に設定 山本春海 2010年8月30日 8:07
    • 回答としてマーク 山本春海 2010年9月2日 6:36
    2010年8月7日 11:28

すべての返信

  • parent.Controls.Add(btn);
    

    とありますが、提示されたコードはどこに記述したものなんでしょうか?Form を継承したクラス内にですか?

    試しに下のようなコードを書いて実行してみたところ、Buttonの背景色は変わりましたし、TextBoxの文字列も変わりました。

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace ColorSample
    {
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
    
          // コントロールを初期化するメソッドを呼び出す。
          Init();
        }
    
        private Button btn;
        private TextBox txt;
    
        private void Init()
        {
          btn = new Button();
          btn.Text = "click";
          btn.BackColor = Color.Black;
          btn.Location = new Point(10, 10);
          btn.Click+=new EventHandler(btn_Click);
    
          txt = new TextBox();
          txt.Text = "OFF";
          txt.Location = new Point(10, 50);
    
          // フォームに追加
          Controls.Add(btn);
          Controls.Add(txt);
        }
    
        private void btn_Click(object sender, EventArgs e)
        {
          btn.BackColor = Color.Red;
          txt.Text = "ON";
        }
      }
    }
    


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答の候補に設定 山本春海 2010年8月30日 8:07
    • 回答としてマーク 山本春海 2010年9月2日 6:36
    2010年8月7日 11:28
  • > クラスでの場合は正常に表示しました。 メソッド化したらNGになりました。

    たぶん 前のスレッドからの続き と思われますが、コントロールのインスタンスをどのクラスが保持しているのか、少し混乱しているように見受けられます。一度整理して考えてみてはいかがでしょうか?

    #OOP の素養がないと、ちときついかも・・・


    ひらぽん http://d.hatena.ne.jp/hilapon/
    2010年8月7日 14:26
    モデレータ
  • なかむら 様

    ひらぽん 様

    ご返信ありがとうございます。

     

    アドバイスの内容に沿って、コードを徹底的に調べたいと思います。

    解決しましたら報告させていただきます。

     

     

    2010年8月8日 2:19
  • こんにちは、黄昏男子 さん。

    MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。

    その後いかがでしょうか。
    なかむらさんからの投稿は参考になる情報かとおもわれますので、勝手ながら私のほうで回答としてマークさせていただきました。
    なかむらさん、ひらぽんさん、アドバイスありがとうございます。

    解決に役立った投稿や、参考になる情報など、有効な情報には回答としてマークすることをお願いしています。
    今後、同じ問題でこのスレッドを参照される方にも、有効な情報がわかりやすくなるかと思いますので、よろしくお願いいたしますね。

    お時間ができましたら、その後の状況をお知らせくださいね。
    今回はひとまず回答マークをつけさせていただきましたが、ご不明点などあれば、ご質問を続けてくださいね。

    今後とも、MSDN フォーラムをよろしくお願いいたします。それでは。
                                                                                                                     
    マイクロソフト株式会社 フォーラム オペレーター 山本 春海

    2010年9月2日 6:36