• 締切済み

C#で動的に配置したコントロール

はじめまして 開発歴1年未満の開発者ですがよろしくお願いします。 開発環境 Visual Studio 2008 C# ASP.NET protected void Page_Load(object sender, EventArgs e) { TextBox TextBox = new TextBox(); TextBox.ID = "TextBox1"; TextBox.Text = "C# ASP.NET"; form1.Controls.Add(TextBox); } protected void Button1_Click(object sender, EventArgs e) { string strTextBox1 = ??????? } と上記のように読み込み時に、テキストボックスのみを動的に配置し、デザイナで配置したのボタンを押した際に、テキストボックスに入力された値を、取得したいのですが、方法がわかりません・・・ お忙しいとは、思いますがご回答よろしくお願いします。

みんなの回答

  • garikuma
  • ベストアンサー率66% (2/3)
回答No.1

参考URLのようなことでしょうか? ちょっと形式は違いますが、TextBoxの宣言位置と、真中あたりにあるイベントハンドラーの追加方法を見ると分かるかと思います。 コントロールの動的生成とイベントハンドラの追加は、Page_LoadよりはPage_Initでやる方がよいようですね。

参考URL:
http://support.microsoft.com/kb/317794/ja

関連するQ&A

  • C#でテキストボックスをクリック→フォームが開く→フォームで設定した値

    C#でテキストボックスをクリック→フォームが開く→フォームで設定した値を元のテキストボックスに入力 こんな感じのことをC#でやりたいのですがよくわからないので教えてください。 1. 親をForm1、子をForm2とします 2. Form1のTextBox1をクリックするとForm2が開いきます 3. Form2で設定した値をForm2の「入力」ボタンを押すとForm2が閉じてTextBox1に値が入力されます というものです。 ここで、textBoxは「クリックしたコントロール名を取得してForm2に渡したい」のです。 テキストボックスがたくさんあるので、textBox1とか決まった名前ではありません。 この部分がわからないのです。 ------------------------------------------------------- Form1: private void textBox1_Click(object sender, EventArgs e) {  Form2 fromItem = new Form2(sender);  DialogResult deRet = fromItem.ShowDialog(); } Form2: public Form2(object sender) {  InitializeComponent();  object pSender = sender; } private void button_input_Click(object sender, EventArgs e) {  ((System.Windows.Forms.TextBox)pSender).text = "hoge"; } ------------------------------------------------------- この程度しかわかりません。 正しい方法を教えてください。よろしくお願いいたします。

  • 【C#】EventArgsについて

    いつもお世話になります。 C#に関して質問です。 VisualC#2008を使っています。 private void Form1_Load(object sender, EventArgs e) などで見かける、EventArgs e とは何を意味しているのでしょうか? 誰か教えていただけませんか? よろしくお願いします。

  • 【C#】Page_Loadさせない方法について

    お世話になっております。 ご存知の方いらっしゃいましたら、ご教授願えますでしょうか? Page_Loadイベントについてお尋ねしたいと思います。 フォーム内にいくつかのテキストボックスやを設置し、 テキストボックスの内容をDBへ反映させるための 実行ボタンも設置されていて、これを押した時に ページロードを行いたいのですが、 テキストボックスの内容が変更される度に、 Page_Loadイベントが起こってしまいます。 Page_Loadイベントでは以下のような処理が行われています。 ------------------------------------------------------------- protected void Page_Load(object sender, EventArgs e) { if (IsPostBack == false) { //テキストのReadOnlyの設定等 ......... } } ------------------------------------------------------------- テキストボックスが変更された時には、 必ずPage_Loadイベントが起こるのでしょうか? また、テキストボックスを変更したときには Page_Loadイベントを起こさない方法はあるのでしょうか? 初歩的な質問ですみません・・・。 お手数ですがご教授頂きますよう 宜しくお願いいたします。

  • C#で動的にコントロールを取得するにはどのようにしたらよいのでしょうか

    C#で動的にコントロールを取得するにはどのようにしたらよいのでしょうか? C#2008ですが、Form1にTextBoxが30個あって、textBox1~textBox30という名前がついています。 このテキストボックスの値をForm2で取得したいのですがなかなかうまくいきません。 ------------------------- Form2: private void Form2_Click(object sender, EventArgs e){  Form1 fm = new Form1();    int No = 15; //ここを1~30まで動的にしたい  string result = fm.textBox15.Text; //直接comboBox_type15と書くのではなく「"comboBox_type" + No.ToString()」のようにしたい  MessageBox.Show(result); } ------------------------- コントロールを配列にして Control[] ctlArray = new Control[30] { fm.textBox1, fm.textBox2, …, fm.textBox30 }; のようにしてみましたが、エラーになってしまいます。 いろいろネットで検索してみたのですが、「コントロール名を動的に文字列で作成して使う」という方法がどこにも載っていなく、数時間格闘しています。 すみませんがご教授願います。よろしくお願いいたします。

  • ASP Pageの孫継承のPage_Load

    VisualStudio2010/.NET4.0で開発しています。 やりたい事  ・以下のVBのC#版を作りたい。   継承元のPage_Loadを実行させたい Public Class Base  Inherits System.Web.UI.Page   Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load    Response.Write("親Page_Load")   End Sub End Class Public Class _Default  Inherits Base   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load    Response.Write("子Page_Load")   End Sub End Class 上記のaspは実行すると画面上に「親Page_Load子Page_Load」と表示される。 だが、以下のプログラムでは「子Page」としか表示されないので困っております。 public class Base : System.Web.UI.Page {  private void Page_Load(object sender, EventArgs e)  {   Response.Write("親Page");  } } public partial class _Default : Base {  protected void Page_Load(object sender, EventArgs e)  {   Response.Write("子Page");  } } よろしくお願いいたします。

  • 表示ボタン押下すると、テキストボックスに現在日時を表示する方法(C#.NET)

    C#.NETの初心者です。 Visual Web Developerを使用して勉強しています。 ボタンを押下後、テキストボックス(txtDatetime)に現在日時を取得するために、以下のような記述等をしていますが、うまいきません。 ご教授頂けますよう、よろしくお願い致します。 --------------------------------------------------------------- protected void Button1_Click(object sender, EventArgs e) { txtDatetime.Text = DateTime.Now; } ---------------------------------------------------------------

  • C#でオブジェクトの有無を取得する

    オブジェクトが作られている時と作られていない時で処理をわけたいのですがうまくいきません。 この書き方の何がまずいのでしょうか? namespace オブジェクト検索 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Control c = Controls["form2"]; if (c != null) { ((TextBox)c).Text += "*"; } } private void button2_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.Show(); Application.DoEvents(); } } } ボタン2を押した時に新しいフォームが立ち上がり、そのフォームがあるときは*が出るようにしたいです。

  • c# イベントハンドラ 統一

    trackBarを複数配置しているのですが、そのtrackBarごとに private void trackBar1_Scroll(object sender, EventArgs e) { previewcolor(this.trackBar1.Value,'赤'); } private void trackBar2_Scroll(object sender, EventArgs e) { previewcolor(this.trackBar1.Value, '青'); } private void trackBar3_Scroll(object sender, EventArgs e) { previewcolor(this.trackBar1.Value, '緑'); } private void trackBar4_Scroll(object sender, EventArgs e) { previewcolor(this.trackBar1.Value, '透'); } こんな風に別々に記述する形になって非常にスッキリしないです。 これをジェネリクス?やデリゲート?などを使ってすっきりできないのでしょうか? visual stdio c# 2008を使ってます。 宜しくお願いします。

  • ASP.NETでWebユーザーコントロールを作成していますが、あるユー

    ASP.NETでWebユーザーコントロールを作成していますが、あるユーザーコントロールを拡張して別のユーザーコントロールを作成したいと思っています。 Webカスタムコントロールであれば、クラスの継承の概念を使って派生クラスを作成し、追加したいコントロールやフィールドを派生クラスで追加するのですが、ユーザーコントロールでこれと同じ事はできないものでしょうか? Visual Studio 2005環境ですが、Webカスタムコントロールはデザイナを使った開発ができず、わざわざDLLにコンパイルした後aspxページに埋め込んでやらないと見た目を確認できません。その点、ユーザーコントロールは通常のWindowsフォームアプリケーションのように、デザイナ上でコントロールをD&Dし、プロパティエディタでプロパティの設定もできます。 下記に試してみたコードを示します。 [WebUserControl1.ascx] <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApplication1.WebUserControl1" %> <%@ Register Assembly="WebBaseFormLib" Namespace="WebBaseFormLib" TagPrefix="cc1" %> <asp:Button ID="Button1" runat="server" Text="Button1" /> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> [WebUserControl1.ascx.cs] namespace WebApplication1 { public partial class WebUserControl1 : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { } } } [WebUserControl2.ascx] <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl2.ascx.cs" Inherits="WebApplication1.WebUserControl2" %> <%@ Reference Control="~/WebUserControl1.ascx" %> <asp:Button ID="Button2" runat="server" Text="Button2" /> [WebUserControl2.ascx.cs] namespace WebApplication1 { public partial class WebUserControl2 : WebUserControl1 //WebUserControl1を継承 { protected void Page_Load(object sender, EventArgs e) { } } } こうした場合に、WebUserControl2をaspxページで使用してもButton2しか表示されません。 期待する動きとしては、WebUserControl1に配置したButton1とtextbox1が透過的に表示して欲しかったのですが。

  • イベント発生について

    お世話になります。 .NET C#で開発をしております初心者です。 テキストボックスに数字を入力したら、その値をメッセージボックスで ユーザーに確認を促したいのですが、そのイベント発生タイミングを どうしたらいいのか考えています。 現在は下記の様にしています。 まず、TextChangeイベントで、変数に代入してから、Leaveイベントでメッセージボックス を表示させています。 本当は、Leaveイベントでなく、その場でメッセージボックスを表示させたいのですが、 でも、TextChangeイベントだけでは、例えば二桁以上の数字を入力しようとしていた場合、 一桁数字を打ち込む度に、TextChangeイベントが発生してしまい、その度にメッセージボックスが 表示されてしまうので、仕方なくLeaveイベントも使っています。 何か良い方法ってありますでしょうか。 どなたかご親切な方、ご教授頂きたく宜しくお願い致します。                           記 private void textBox1_TextChanged(object sender,EventArgs e) { if(textBox1.Text != "-") { if(textBox1.Text != "") { suuryou = int.Parse(textBox1.Text);   } } } private void textBox1_Leave(object sender,EventArgs e) { if(textBox1.Text != "") { MessageBox.Show(suuryou,"", MessageBoxButtons.OK, MessageBoxIcon.Information); } }