C#でテキストボックスをクリックしてフォームを開く方法と値の設定方法

このQ&Aのポイント
  • C#を使用してテキストボックスをクリックするとフォームが開き、フォームで設定した値を元のテキストボックスに入力する方法について教えてください。
  • Form1のTextBox1をクリックすると、Form2が開きます。Form2で設定した値を「入力」ボタンを押すことで、Form2が閉じてTextBox1に値が入力されます。
  • TextBoxのクリックイベントを使用してForm2を開き、Form2で設定した値をForm1に渡す方法について教えてください。
回答を見る
  • ベストアンサー

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"; } ------------------------------------------------------- この程度しかわかりません。 正しい方法を教えてください。よろしくお願いいたします。

  • suffre
  • お礼率76% (2013/2633)

質問者が選んだベストアンサー

  • ベストアンサー
noname#166246
noname#166246
回答No.1

Form2の側を少し直します。 object pSender; // 追加 public Form2(object sender) { InitializeComponent(); pSender = sender; // 追加 //object pSender = sender; // 削除。これだとpSenderが他から見れません } private void button_input_Click(object sender, EventArgs e) { // textじゃなくてText ((System.Windows.Forms.TextBox)pSender).Text = "hoge"; //以下は追加で試してみました。 //MessageBox.Show(((System.Windows.Forms.TextBox)pSender).Name); //MessageBox.Show(((System.Windows.Forms.TextBox)pSender).Parent.Name); //this.Close(); }

suffre
質問者

お礼

ありがとうございます。 >pSender = sender; // 追加 こうすると「名前'pSender'は現在のコンテキスト内に存在しません」というエラーが出てしまいます…。

その他の回答 (1)

noname#166246
noname#166246
回答No.2

一番最初の、これ、 object pSender; // 追加 忘れていませんか?

suffre
質問者

お礼

あ!忘れていました! ここで宣言するのですね。無事うまくできました。 この度はどうもありがとうございました。

関連するQ&A

  • Form2のテキストボックスを更新する方法(C#)

    namespace WindowsFormsApplication_test { public partial class Form1:Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender,EventArgs e) { Form2 Fm2 = new Form2(); Fm2.StartPosition = FormStartPosition.CenterScreen; Fm2.Show(); } private void button1_Click(object sender,EventArgs e) { Random a = new Random(); int x=a.Next(100); x=x+10; textBox1.Text=x+""; } } } 起動時にForm1とForm2を表示するプログラムを作ったのですが、 Form1のボタンをクリックした時、 Form2のtextBox1に、Form1のxの値を表示する方法が分かりません。 記述方法を教えて下さい。

  • C# 親フォームで指定した値を子フォームで表示する

    表題の件がうまくできず、困っています。 やりたいことは 親フォームのリストボックスで選択した インデックス番号をshouDialog()で立ち上げた子フォーム側の textBoxに表示したいんですが、 何も表示されず困っています。 namespace test { public partial class Form1 : Form { //リスト変数 public string listChoise; [STAThreadAttribute] static void Main() { Application.Run(new Form1()); } public Form1() { InitializeComponent(); } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { listChoise = listBox1.SelectedIndex.ToString(); MessageBox.Show(listChoise);//←ここでは値がでます }     private void button1_Click(object sender, EventArgs e) { //子フォームを立ち上げる Form2 form = new Form2(); form.ShowDialog(); } } } ↓Form2クラス namespace test { public partial class Form2 : Form { public Form2() { InitializeComponent(); //リスト選択変数 Form1 list = new Form1(); textBox2.Text = list.listChoise; } } } この二つのクラスです。 とくにエラーはありません。 ちなみに >>>//リスト変数 >>>public string listChoise; の部分を public string listChose = "aaaaa"; としておくと、 子フォームのテキストボックスに"aaaaa"と表示されているようなんですが、 >>>listChoise = listBox1.SelectedIndex.ToString(); の値がちゃんと子フォームの方で受け取れていないようです。 結果はなにもひょうじされません。 子フォームの方で、 MessageBox.Show("listChoise");をしても 何も表示されません。 どんな原因が考えられますでしょうか。 よろしくお願いします。 環境:visualC# 2008 Express Edition

  • C# フォーム追加後、旧フォームを閉じたい

    前略 ・C#で教えてください。 ・Form1 からshowDiag()メソッドでForm2をつくります。Form2が表示されたら非アクティブとなったForm1を閉じたいのですが どのようにしたらよいのかおしえてください。  下記は、Close() メソッドで Form2側から閉じようとしたプログラムですがFrom1を閉じることができません。 よろしくお願いします。 //----------------------------------------------- namespace formClose { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.ShowDialog(); } }   public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { Form1 form1 = new Form1(); form1.Close(); //Form1が閉じない!! } private void button1_Click(object sender, EventArgs e) { this.Close(); //Form2を閉じる }    } } 以上

  • 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を押した時に新しいフォームが立ち上がり、そのフォームがあるときは*が出るようにしたいです。

  • 別のフォームの値を初期値として設定するには?

    別のフォームの値を初期値として設定するには どうしたらよいでしょうか? private: System::Void Form2_Load(System::Object^ sender, System::EventArgs^ e) { this->comboBox1->Items = Form1.comboBox1.Items; }

  • C#で、テキストボックスの入力について。

    テキストボックスに数値しか入力させないようにし、さらにそれを3桁のコンマ区切りで表示しています。 以下の文でやっています。 private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar < '0' || '9' < e.KeyChar) && e.KeyChar != '\b' ) { e.Handled = true; } } private void textBox1_Leave(object sender, EventArgs e) { this.textBox1.Text = string.Format("{0:#,0}", ulong.Parse(this.textBox1.Text)); } 上の方では数値のみの入力制限、下の方では桁区切りを実行しています。 これでうまくいくのですが、エラーが一つ出ます。 一度数字を入力し、リーブしたらもう桁区切りがなされます。 しかしそれを書き換える、例えば全部消してから書き換えるのでなく、桁数が一文字多かったので消そうというときに、一つ消してリーブすると、コンマが入っているためにエラーになります。 これを防ぐにはどうすればいいでしょうか? また、ただそれだけでは、桁区切りがおかしくなるはずです。 できれば書き換えた後に、新たに桁区切りがなされるようにしたいのですがやはり難しいでしょうか?

  • フォーム間の値の渡し方

    こんにちわ。 C#で以下のようなことを実現しようとしています。 フォームA ・コンボボックスを選択⇒SelectedIndex値を変数Pへ ・フォームBを開く フォームB ・変数Pを読み込み処理 1.ここで、フォームAでSelectedIndexの値は変数Pに入っているのですが、 その値をフォームBで呼び出す方法がわかりません。 以下のコードでは、「System.Windows.Forms.FormにPの定義がありません」となってしまいます。 2.変数Pはpublicで宣言しているのですが、 それだけで全てのフォームから呼び出せる変数となるわけではないのでしょうか? ちなみに以下のようなコードにしてあります。 *********フォームA********* public int P; private void btn1_click(object sender, System.EventArgs e) { P = comboBox.SelectedIndex; F_B f1 = new F_B(); f1.ShowDialog(); } *********フォームB********* private void F_B_Load(object sender, System.EventArgs e) { switch (Owner.P) { case 0: ・・・・ case 1: ・・・・ } } どなたかアドバイスをお願いいたします。

  • C#でマスターから検索した値に対応する別列をラベルに表示したい

    こんばんわ。 C#のフォームのテキストボックスに[社員番号]を入力し、社員マスタから該当社員氏名を同じフォーム内のラベルに表示するという処理を行おうとしています。 以下のコードで、 [goButton]を押したあと、社員マスタの氏名をラベルに表示する部分の記述の仕方がわかりません。 社員マスタは[syainNo]と[simei]という2列のフィールドで構成されています。 private void Form1_Load(object sender, System.EventArgs e) { dataSet11.Clear(); sqldataAdapter1.Fill(dataSet11, "syainM"); } private void goButton_Click(object sender, System.EventArgs e) { int i; //カウンタ //検索する値が入力されていないとき if (textBox1.Text == "") { MessageBox.Show("検索する社員番号を入力してください"); return; } //先頭から検索 for (i = 0; i < dataSet11.Tables["syainM"].Rows.Count; i++) { if ( dataSet11.Tables["syainM"].Rows[i]["syainNo"].ToString() == textBox1.Text) { //ここでラベルに社員マスタの氏名を表示する return; } } } どなたかわかる方よろしくお願いします。

  • 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 = ??????? } と上記のように読み込み時に、テキストボックスのみを動的に配置し、デザイナで配置したのボタンを押した際に、テキストボックスに入力された値を、取得したいのですが、方法がわかりません・・・ お忙しいとは、思いますがご回答よろしくお願いします。

  • C++でメッセージボックスを表示したい

    C++でメッセージボックスを表示したい フォーム上にbutton1を設置しました。 クリックして、メッセージボックスを表示したいのですがどうすればいいのかわかりません。 vb.netで言う Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MessageBox.Show("test") End Sub をC++で書くとどうなるんですか? button1をダブルクリックして private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { } }; を表示させたのですが、どこにMessageBoxを入れればいいのか教えてください。 よろしくお願いします。

専門家に質問してみよう