![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?08b1c8b)
こんにちは。ユーザーコントロール内のボタンをクリックした時、そのユーザーコントロールをおいている親フォーム側で、それを知るにはどのようにすればよいでしょうか?
----------------------------------------------------------------------
[Form1.cs]
void Inform_UserControlButton1Click()
{
//親が持っている変数を使って処理を行いたい
}
void Form1_Load(....)
{
//ユーザコントロールを設置
UserControl1 ctrl = new UserControl1();
this.Controls.Add(ctrl);
//ユーザコントロール内のbutton1を見つける
List<Control> ctrl = new List<Control>(cps.Controls.Find("button1", false));
//Form1が持っている変数を使う為の関数を通るようにしたい
(Button)ctrl[0].Click += new System.EventHandler(Inform_UserControlButton1Click); //←エラー
}
----------------------------------------------------------------------
[UserControl.cs]
button1が配置されています。
----------------------------------------------------------------------
こんな感じにしてできないかなー?と思っていたのですが、//←エラーのところで、
イベント 'System.Windows.Forms.Control.Click' は += または -= の左側にのみ表示されます。
となってしまい上手くいきません。
どのようにすればよいでしょうか?
No.3ベストアンサー
- 回答日時:
> ((Button)ctrl[0]).Click += new EventHandler(Inform_UserControlButton1Click);
> では、+=の左側にだけ~・・・というエラーが出ます。
えっと、動いたものを貼り付けたので、コンパイルエラーにはならないはずです。
で、上記コードは、質問時の記述だと左辺が
(Button)ctrl[0].Click
となっていると思います。これだと確かにエラーになります。
しかし
((Button)ctrl[0]).Click
と、キャストを括弧で括って優先させるとエラーにならないと思いますが、
いかがでしょうか?
うは;申し訳ございません。おっしゃるとおりでした。
()のつけ方を見間違っていました。大変失礼致しました。
なるほどです。理解できました。
上記修正を行い、思ったとおりの動作にすることができました。
すばやい対応をしていただき、大変助かりました。ありがとうございました!
No.2
- 回答日時:
コメント全然読んでませんでした。
多分、こういうことですかね。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//ユーザコントロールを設置
UserControl1 cps = new UserControl1();
this.Controls.Add(cps);
//ユーザコントロール内のbutton1を見つける
List<Control> ctrl = new List<Control>(cps.Controls.Find(@"button1", false));
//Form1が持っている変数を使う為の関数を通るようにしたい
((Button)ctrl[0]).Click += new EventHandler(Inform_UserControlButton1Click);
}
private void Inform_UserControlButton1Click(object sender, EventArgs args)
{
Console.WriteLine("hoge");
}
}
この回答への補足
お世話になっております。
入れ違いで投稿してしまったようです。(No1のご回答のほうへ返信していました。)
内容的には、おっしゃるとおりです。そのような事をしたいのですが、No2でnaktakさんが書いてくださったような
((Button)ctrl[0]).Click += new EventHandler(Inform_UserControlButton1Click);
では、+=の左側にだけ~・・・というエラーが出ます。
No1で教えて頂き、また、No1の返信で私が書いたように
((UserControl1)ctrl[0]).button1.Click += new EventHandler(Inform_UserControlButton1Click); //-----(1)
とすればコンパイルは通りますが、実行時エラーでキャストできません、となってしまいました。
No.1
- 回答日時:
こういうことですか?
cps.Controls.Find("button1", false)
cpsがどこからきたのか分かりません。
ctrl変数が重複しているのでよく分かりません。]
勘というか、やれる方法で書いてます。
UserControlを操作するんですから、UserControl内のButtonのModifiersプロパティはPublicか
Internal、もしくはProtected Internalでないとダメです。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//ユーザコントロールを設置
UserControl1 button = new UserControl1();
button.Name = @"button1";
this.Controls.Add(button);
//ユーザコントロール内のbutton1を見つける
List<Control> ctrl = new List<Control>(this.Controls.Find(@"button1", false));
//Form1が持っている変数を使う為の関数を通るようにしたい
((UserControl1)ctrl[0]).userControlInnnerButton1.Click += new EventHandler(Inform_UserControlButton1Click);
}
private void Inform_UserControlButton1Click(object sender, EventArgs args)
{
Console.WriteLine("hoge");
}
}
早速のご回答、ありがとうございます。
参考コードの誤記について、申し訳ございません。
naktakさんの書いて下さった方を元にして修正しました。
また、ユーザコントロール内のボタンのModifireはprivateのままでしたので、publicに変更致しました。
--------------------------------------------------------------------
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//ユーザコントロールを設置
UserControl1 usrCntrl = new UserControl1();//ボタンはこのユーザコントロールにデザイナ上で元から設置してあります。
this.Controls.Add(usrCntrl);
//ユーザコントロール内のbutton1を見つける
List<Control> ctrl = new List<Control>(usrCntrl.Controls.Find(@"button1", false));
//Form1が持っている変数を使う為の関数を通るようにしたい
((UserControl1)ctrl[0]).button1.Click += new EventHandler(Inform_UserControlButton1Click); //-----(1)
}
private void Inform_UserControlButton1Click(object sender, EventArgs args)
{
Console.WriteLine("hoge");
}
}
--------------------------------------------------------------------
-----(1) の所のキャストの仕方を上記にするとコンパイルは通るようになったのですが、実行時エラーで、----(1)の箇所で
型 'System.Windows.Forms.Button' のオブジェクトを型 'Application1.UserControl1' にキャストできません。
とエラーになってしまいました。
(Button)((UserControl1)ctrl[0]).button1.Click
(Button)(((UserControl1)ctrl[0]).button1).Click
のような書き方では、初めの、+=の左側にしか置けません、のコンパイルエラーになるようです。
そもそも無理な事をしようとしているのでしょうか・・・?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- JavaScript WordPressのコンタクトフォーム7にて送信者の位置情報を送らせたい 2 2022/09/14 23:28
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
このQ&Aを見た人はこんなQ&Aも見ています
-
初めて見た映画を教えてください!
初めて見た映画を覚えていますか?
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
もし10億円当たったら何に使いますか?
みなさんの10億円プランが知りたいです!
-
あなたなりのストレス発散方法を教えてください!
自分なりのストレス発散方法はありますか?
-
今から楽しみな予定はありますか?
いよいよ2025年が始まりました。皆さんには、今から楽しみにしている予定はありますか?
-
C#で親にイベントを投げる方法
C言語・C++・C#
-
ユーザコントロールのイベント取得について(C#)
その他(プログラミング・Web制作)
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
-
4
【C#】DataGridViewの最大列数について
システム
-
5
C#でButtonのフォーカス枠を消したいのですが
C言語・C++・C#
-
6
構造体のメンバをfor文で回したい
C言語・C++・C#
-
7
C#でフォームのオブジェクト名を変数名で指定
C言語・C++・C#
-
8
C# DataGridView特定セルの入力フォーム変更について
C言語・C++・C#
-
9
Loadイベント中にほかのイベントを発生したくない
その他(プログラミング・Web制作)
-
10
インスタンス参照でアクセスできない。代わりに型名?
C言語・C++・C#
-
11
C# 子のコントロールからイベントを送る方法?
C言語・C++・C#
-
12
DataGrdViewに関連付けたデータの更新
C言語・C++・C#
-
13
C# 超初心者です。 this.Refresh();という文を使いたいです
C言語・C++・C#
-
14
visualstudio C# テキストボックスの数値を取得して計算する方法を教えてください。
Microsoft ASP
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数をコントロール型で使用す...
-
C# ユーザコントロール内のボタ...
-
エクセルVBAでオプションボタン...
-
Groupboxの配下のコントロール...
-
VBAのエラーについて、”実行時...
-
ExcelVBAでListViewが使用できない
-
chr関数の呼び出しで「プロ...
-
'ckbl' コントロールは作成され...
-
vb.netで画面のコントロールId...
-
エクセル・VBA CheckBoxのオブ...
-
DataGridView、1セルに複数コ...
-
ユーザーフォームで動的(Me.Con...
-
C#で角が丸いテキストボックス
-
全てのオブジェクトのプロパテ...
-
ユーザコントロールのイベント...
-
EXCELでactivexコントロールを...
-
TabStripコントロールの上にLab...
-
PDQCommは今でも入手できますで...
-
ListViewのチェックボックスに...
-
C# Form上に配置されたコントロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
エクセルVBAでオプションボタン...
-
ExcelVBAでListViewが使用できない
-
ユーザーフォームで動的(Me.Con...
-
VBA ユーザーフォームの Keypre...
-
チェックボックスをオンにした...
-
Groupboxの配下のコントロール...
-
Labelコントロールの(左右)余...
-
コントロールを移動できない
-
C# Form上に配置されたコントロ...
-
EXCELでactivexコントロールを...
-
'ckbl' コントロールは作成され...
-
vb.netで画面のコントロールId...
-
アクセス特有の書き方?
-
エクセル コントロールツール...
-
C#で角が丸いテキストボックス
-
全てのオブジェクトのプロパテ...
-
変数をコントロール型で使用す...
-
コンボボックスの文字によるif...
おすすめ情報