2016-10-11 6 views
0

C#を使用して、Windowsフォームを使用して1つのボタンをドラッグアンドドロップし、ボタンとテキストボックスを動的に作成しました。私はボタンのテキストボックスからの入力を表示したいと思います。ハードコードされたボタンは正常に動作しますが、動的ボタンはSystem.NullReferenceExceptionでプログラムをクラッシュさせます。C#を使用した動的テキストボックス入力

ダイナミックに作成されたボタンをクリックして、動的に作成されたテキストボックスから入力を取得する方法を教えてください。

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication8 
{ 
public partial class Form1 : Form 
{ 
    Button btnDynamic; 
    TextBox txtBoxYear; 
    public Form1() 
    { 
     InitializeComponent(); 
     tp(); 

    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     Button btn = (Button)sender; 
     btnHardCode.Text = txtBoxYear.Text;  //This hard coded button works 
     // btnDynamic.Text = txtBoxYear.Text; //The dynamic button crashes the program with a 
              //System.NullReferenceException 
    } 
    private void tabPage1_Click(object sender, EventArgs e) 
    { 

    } 

    private void tp() //put textbox and button on tab on tab click 
    { 
     var tab = tabControl1.TabPages[0]; 
     //tab.Controls.Clear(); 
     var btnDynamic = new Button() 
     { 
      Size = new Size(75, 30), 
      Left = 40, 
      Top = 50, 
      Text = "try", 
     }; 
     btnDynamic.Click += new EventHandler(this.Form1_Load); 
     tab.Controls.Add(btnDynamic); 
     txtBoxYear = new TextBox() 
     { 
      Size = new Size(200, 100), 
      Left = 20, 
      Top = 10, 
     }; 
     tab.Controls.Add(txtBoxYear); 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 

    } 
} 

}

答えて

0

私は、動的に作成したボタンをクリックするだけで、動的に作成されたテキストボックスから入力を取得する方法を考え出しました。まず、クラスのレベルでボタンの名前を宣言します。第2に、ボタンオブジェクトをインスタンス化するとき、上記のようにvarキーワードを使用しないでください。このようにそれをインスタンス化: btnDynamicは=新しいボタン()ここで

は、機能コードです:

using System; 
using System.Drawing; 
using System.Windows.Forms; 

namespace dynamicButton 
{ 
    public partial class Form1 : Form 
    { 
     TextBox txtBoxYear; 
     Button btnDynamic; 

     public Form1() 
     { 
      InitializeComponent(); 
      tp(); 
     } 


     private void Form1_Load(object sender, EventArgs e) 
     { 
       Button btn = (Button)sender; 
       btnHardCode.Text = txtBoxYear.Text; 
       btnDynamic.Text = txtBoxYear.Text;   
     } 
     private void tabPage1_Click(object sender, EventArgs e) 
     { 

     } 

     private void tp() //put textbox and button on tab on tab click 
     { 
      var tab = tabControl1.TabPages[0]; 
      //tab.Controls.Clear(); 
      btnDynamic = new Button() 
      { 
       Size = new Size(100, 30), 
       Left = 40, 
       Top = 50, 
       Text = "DynamicButton", 
      }; 
      btnDynamic.Click += new EventHandler(this.Form1_Load); 
      tab.Controls.Add(btnDynamic); 
      txtBoxYear = new TextBox() 
      { 
       Size = new Size(200, 100), 
       Left = 20, 
       Top = 10, 
      }; 
      tab.Controls.Add(txtBoxYear); 

     } 

     private void btnHardCode_Click(object sender, EventArgs e) 
     { 

     } 
    } 
} 
関連する問題