2017-12-03 12 views
1

お手伝いができたら幸いです。 データベースから読み込まれた豊富なテキストボックスとテキストをプログラムで作成しました。このテキストは、プログラムで作成された別のボタンがあるパネルに追加されます。表示されたようC#プログラマチックに作成されたリッチテキストボックスを作成し、ボタンからテキスト値を取得する

:偉大な作品

private void GetPending() 
    { 
     SQL = "SELECT notID,notNote FROM Notes WHERE notisActive = @notisActive AND notUser = @notuser "; 
     y = 3; 
     using (SqlConnection SQLCon = new SqlConnection(ConnectionString)) 
     { 
      SqlCommand cmd = new SqlCommand(SQL, SQLCon); 
      cmd.Parameters.Add(new SqlParameter("notIsActive", "Pending")); 
      cmd.Parameters.Add(new SqlParameter("notUser", lblUserName.Text)); 

      try 
      { 
       SQLCon.Open(); 
       using (SqlDataReader read = cmd.ExecuteReader()) 
       { 
        while (read.Read()) 
        { 
         //Main Panel 
         Panel pnlPendingNote = new Panel(); 
         pnlPendingNote.Size = new System.Drawing.Size(315, 110); 
         pnlPendingNote.Location = new Point(3, y); 
         pnlPendingNote.BorderStyle = BorderStyle.FixedSingle; 
         pnlPendingNote.BackColor = Color.FromArgb(244, 244, 244); 

      // Button to Activate To Do 
         Button butActivateToDo = new Button(); 
         butActivateToDo.Location = new Point(250, 10); 
         butActivateToDo.Size = new System.Drawing.Size(25, 25); 
         butActivateToDo.BackColor = Color.Transparent; 
         butActivateToDo.FlatStyle = FlatStyle.Flat; 
         butActivateToDo.FlatAppearance.BorderSize = 0; 
         butActivateToDo.FlatAppearance.MouseOverBackColor = Color.FromArgb(244, 244, 244); 
         butActivateToDo.Cursor = Cursors.Hand; 

         butActivateToDo.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.Activate_25)); 
         pnlPendingNote.Controls.Add(butActivateToDo); 

     RichTextBox rxtNotes = new RichTextBox(); 
         rxtNotes.Size = new System.Drawing.Size(307, 68); 
         rxtNotes.Location = new Point(3, 37); 
         rxtNotes.Text = (read["notNote"].ToString()); 
         rxtNotes.ReadOnly = true; 
         rxtNotes.BorderStyle = BorderStyle.None; 
         rxtNotes.BackColor = Color.FromArgb(244, 244, 244); 
         pnlPendingNote.Controls.Add(rxtNotes); 

      pnlPendingNote.Name = "PenNote" + pendingcounter; 
         pnlPendingNote.Tag = read.GetInt32(0); 
         butActivateToDo.Name = "PenNote" + pendingcounter; 
         butActivateToDo.Tag = read.GetInt32(0); 
         rxtNotes.Name = "PenNote" + pendingcounter; 
         rxtNotes.Tag = read.GetInt32(0); 

      // Increase by 1 
         pendingcounter++; 
         // Create Double Click 
         butActivateToDo.Click += new EventHandler(NewbutActivateToDo_Click); 
         pnlPendingNote.DoubleClick += new EventHandler(NewPendingButton_DoubleClick); 
         // Add Pending Note size inside Panding Panel 
         pnlPending.Controls.Add(pnlPendingNote); 

         y = y + 112; 
        } 
       } 
      } 
      catch (System.Exception Error) 
      { 
       MessageBox.Show(Error.Message); // display error - if unable to connect to server 
      } 
      SQLCon.Close(); // close the sql connection 
     } 
    } 

- 私は、テキストボックスとボタンを作成し、私のパネルを持っています。

は、私は、このコードを持っている:

private void NewbutActivateToDo_Click(object sender, EventArgs e) 
    { 
     Button btn = (Button)sender; 
     RichTextBox rxtNotes = (RichTextBox)sender; 



     for (int i = 1; i < pendingcounter; i++) 
     { 
      if (btn.Name == ("PenNote" + i)) 
      { 

       MessageBox.Show(rxtNotes.Text.ToString()); 
       break; 
      } 

     } 


    } 

程度に働いている - それは私が私がタグに格納されているIDを取得&をクリックしたものをパネルのを取得します。

次テキストボックスからテキスト値を取得します。 だから私は

RichTextBox rxtNotes = (RichTextBox)sender; 

を追加している、これはエラーをスローします:

{ "型のオブジェクトをキャストすることができません 'System.Windows.Forms.Button' 'System.Windows.Forms.RichTextBox' を入力します。 "}

" ActivateToDo "ボタンをクリックすると、RtxtBoxの値を取得したいと思います。

希望これは、意味になり -

おかげ

+0

「Click」イベントの送信者は、「ボタン」です​​。そのeentハンドラで 'RichTextBox'を使用するには、' RichTextBox'を作成して 'Name'プロパティに名前を割り当て、' var rtb =(RichTextBox)this.Controls.Find( "name"、true)を使用します。 FirstOrDefault(); ' –

答えて

2

ストアあなたのボタンのTag()財産でassoicatedリッチテキストボックスへの参照:

Button butActivateToDo = new Button(); 
... 
RichTextBox rxtNotes = new RichTextBox(); 
... 
butActivateToDo.Tag = rxtNotes 

今、あなたはハンドラ内で、リッチテキストボックスを取得することができました:

private void NewbutActivateToDo_Click(object sender, EventArgs e) 
{ 
    Button btn = (Button)sender; 
    RichTextBox rxtNotes = (RichTextBox)btn.Tag; 

    ... 
} 
関連する問題