C#コントロールの取得方法とは?

このQ&Aのポイント
  • C#アプリケーションで選択しているコントロールを取得する方法について調べています。
  • 例えばLeave関数内でMessageBoxでテキストボックスの内容を表示したい場合、ActiveControlを使用することができます。
  • しかし、ActiveControlを使用しても正常に動作しない場合があるため、別の方法も調べています。
回答を見る
  • ベストアンサー

C# コントロール取得

C# コントロール取得 選択しているコントロールを取得する方法とかありますでしょうか? VC#2008でアプリケーションを作っています。 例えばテキストボックスのLeave関数などで MessageBox.Show(this.textbox1.Text) みたいにしたいのですが テキストボックスが20個ぐらい必要だとLeave関数を20個作らなくてはいけないので 上記の方法がわかれば1つで済むので是非知りたいです。 自分でも調べてActiveControlを使用してみたのですが反応しません。 MessageBox.Show(this.ActiveControl.Text); としましたが・・ 教えてください

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

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

using System; namespace Q6036418 { class MainClass:System.Windows.Forms.Form { private System.Windows.Forms.TextBox textbox1; private System.Windows.Forms.TextBox textbox2; public MainClass(){ this.Width = 800; this.Height = 600; textbox1 = new System.Windows.Forms.TextBox(); textbox1.Left = 0; textbox1.Top = 0; textbox1.Width = 100; textbox2 = new System.Windows.Forms.TextBox(); textbox2.Left = 400; textbox2.Top = 0; textbox2.Width = 100; /* 分かりやすいようわざとあとに持ってきた。 */ textbox1.Leave += textboxes_leave; textbox2.Leave += textboxes_leave; this.Controls.Add(textbox1); this.Controls.Add(textbox2); } private void textboxes_leave(object sender, System.EventArgs e){ System.Windows.Forms.MessageBox.Show(((System.Windows.Forms.TextBox)sender).Text); } public static void Main(String[] args){ MainClass form1 = new MainClass(); form1.ShowDialog(); } } }

関連するQ&A

  • 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 }; のようにしてみましたが、エラーになってしまいます。 いろいろネットで検索してみたのですが、「コントロール名を動的に文字列で作成して使う」という方法がどこにも載っていなく、数時間格闘しています。 すみませんがご教授願います。よろしくお願いいたします。

  • 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#)

    環境:Visual Studio 2005 C# Windows Application フォームに自作のユーザコントロールを貼り付けてそのイベントを取得する勉強をしているものです。 フォームでのユーザコントロールイベントを取得して処理をする方法が分かりません。 状況 ユーザコントロールにはテキストボックスを追加しています。 また、フォームにそのユーザコントロールを追加しています。 確認したいことは、ユーザコントロールのテキストボックスになにか値を入力したタイミングでチェンジイベントをフォーム側で察知し、処理をするというものです。 どなたか、要点だけでもいいので教えていただけないでしょうか? 宜しくお願いいたします。

  • イベント発生について

    お世話になります。 .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); } }

  • 【C#】textBoxの指定行のデータを削除

    凄く基本的なことかもしれないのですが色々検索しても見つからなかったので質問させてください。 Visual C# 2010を使っています。 textBoxのMultiLineをtrueにして複数行書けるようにしています。 そこで、プログラム上で指定の行を削除したり書き換えたりする方法を知りたいです。 指定の行のデータを取得する方法はわかったのですが、応用できませんでした。 MessageBox.Show(textBox1.Lines[0].ToString()); で、1行目のデータをMessageBoxで表示できました。 なので、以下のように書けば削除できるかと思いましたがダメでした。 textBox1.Lines[0] = ""; もしくは textBox1.Lines[0].Remove(0); 目的は、以下のような複数行のデータがあった場合に指定の行を消すといったことです。 1234 5678 9012 で、例えば、2行目を消して 1234 9012 としたいです。 textBox1.Text = textBox1.Text.Replace(textBox1.Lines[0], ""); とやって置き換えることはできるのですが、同じデータがある場合に全て置き換わってしまうのと、改行が残ってしまうので微妙です。 よろしくお願いします。

  • C# 同じコントロール名

    同じ名のコントロール名を持ち、同じ振る舞いをするが、formは別々なのがあって、共通化したいのですが方法がわかりません 関数A form1.TextBox1.Text=”aa” 関数B form2.TextBox1.Text=”aa” これを1つの関数にしたいです

  • VB.net Webアプリケーションでのユーザーコントロール(DLL)の作り方

    VB.netでWebアプリケーションでのユーザーコントロール(DLL)を試しに作ったのですが(テキストボックスを張り付けただけのもの)、WebアプリケーションにそのDLLを張り付けてもテキストボックスがでてきません。なぜでしょうか? DLL側のソース(一部)  Inherits System.Web.UI.UserControl'ユーザーコントロールと定義  Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox'テキストボックスはりつけ

  • コントロールをロックしたい

    現在、VB.NETのWINDOWSアプリケーションで開発しており、DBはSqlserver2005を使用しています。 フォームLoad時に、指定したテキストボックスやボタンをロックする(readonly)共通関数を作成しようと考えています。 そこで、どのように記述すればいいか教えて下さい。 (1)フォームロード時 共通関数LookControlを実行する際、引数にコントロール名を渡したいのですが、  どのようにすればいいでしょうか?   Private Sub フォーム_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'テキストボックスの場合 Call LookControl(???, True) ←コントロール名の渡し方 'コンボボックスの場合 Call LookControl(???, True) 'ボタンの場合 Call LookControl(???, True) End Sub (2)共通関数LookControl  どのコントロールが引数で渡されてもロックができる関数を作りたい。  Module mod共通関数_表示 Public Sub LookControl(ByVal pControl As Control, ByVal pReadFlg As Boolean) Dim Textbox As TextBoxBase 'Dim Combbox As ComboBox 'Dim Bottan As Button Try For Each cldControl As Control In pControl.Controls If pControl.HasChildren = True Then LookControl(cldControl, pReadFlg) End If ' Select Case True Case TypeOf cldControl Is TextBoxBase TextBox = DirectCast(cldControl, TextBoxBase) TextBox.ReadOnly = pReadFlg Case TypeOf cldControl Is ComboBox             ??? Case TypeOf cldControl Is Button             ??? End Select Next Catch oExcept As Exception '例外が発生した時の処理 MessageBox.Show(oExcept.ToString, "例外発生") End Try End Sub End Module

  • コントロールでのフォーカスの取得

    WNDOWSXP + VC++2010Express + SDKです。VC++ExpressなのでMFCなどは使えません。 ウィンドウのフォーカスの取得方法について質問します。 メインウィンドウにコントロールを3つ貼り付けます。 エディットコントロール2つと、自分で作成したコントロールが1つです。 自分で作成したコントロールのウィンドウプロシージャは仮に↓こんなものだとします。 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { if(message==WM_KEYDOWN) { if(wParam=='A'){ MessageBox(NULL,_T("A"),_T("KEYDOWN"),NULL); } return 0; } return DefWindowProc(hWnd, message, wParam, lParam); } プログラムを起動し、エディットコントロールAをクリックすると エディットコントロールAにフォーカスが移動します。 キーボードのAボタンを押下すると、エディットコントロールAに「a」と入力されます。 エディットコントロールB、自分で作成したコントロールは無反応です。 エディットコントロールBをクリックすると、エディットコントロールBにフォーカスが移動します。 キーボードのAボタンを押下すると、エディットコントロールBに「a」と入力されます。 エディットコントロールA、自分で作成したコントロールは無反応です。 次に、自分で作成したコントロールをクリックした場合、 フォーカスはエディットコントロールBにあります。キーイベントなども エディットコントロールBのみが反応します。 ここで、自分で作成したコントロールをクリックした場合に 自分で作成したコントロールがフォーカスを取得し、 キーイベントなどを独占的に受け取れるようにしたいのですが、方法がわかりません。 どなたか方法をご存知の方がいらっしゃいましたら、ご教授いただけないでしょうか。

  • VB.NETでテキストボックスをコントロール配列のように扱いたいんですが

    VB.NETではコントロール配列はサポートされていませんが、TextBox1~TextBox10を配列のように扱う方法はありますか?ちなみに、以下の方法ではエラーとなりました。 Controls("TextBox" & i).Text でTextの内容を取得しようとした よろしくお願いします。

専門家に質問してみよう