こんにちは。ユーザーコントロール内のボタンをクリックした時、そのユーザーコントロールをおいている親フォーム側で、それを知るにはどのようにすればよいでしょうか?
----------------------------------------------------------------------
[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も見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
C#で親にイベントを投げる方法
C言語・C++・C#
-
ユーザコントロールのイベント取得について(C#)
その他(プログラミング・Web制作)
-
C# ReadOnlyのTextBoxで
C言語・C++・C#
-
-
4
C#についてText Boxの枠
その他(ソフトウェア)
-
5
GROUP BYを行った後に結合したい。
Oracle
-
6
C# インスタンスの破棄
その他(プログラミング・Web制作)
-
7
別のフォームで記述している関数を実行するには?C#
C言語・C++・C#
-
8
C# 子のコントロールからイベントを送る方法?
C言語・C++・C#
-
9
大量のデータを読み込んで表示する速度を改善したい
C言語・C++・C#
-
10
フルパスから最後のディレクトリ名を取得したい。
Visual Basic(VBA)
-
11
C#で構造体の配列を持った構造体を使いたいのですが
C言語・C++・C#
-
12
DataGridViewでセルクリックイベントを発生させるには
Visual Basic(VBA)
-
13
1つのテーブルに同じデータを参照する複数の列がある場合…
SQL Server
-
14
C# 配列の変数宣言について。
C言語・C++・C#
-
15
checkbox付きListViewで デフォルトチェック
Visual Basic(VBA)
-
16
CloseとDisposeの違い
Visual Basic(VBA)
-
17
C# TEXTが空白であるLABELは何処に???
C言語・C++・C#
-
18
NumericUpDownの数値を選択済みにする方法
Visual Basic(VBA)
-
19
矢印(左右)キーでイベントを発生させたい。
Visual Basic(VBA)
-
20
[C#]ListView一覧表示時の幅設定について
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
変数をコントロール型で使用す...
-
VB.NET 動的コントロールの存在...
-
OCXって何ですか?
-
VBAのエラーについて、”実行時...
-
vb.netで画面のコントロールId...
-
EXCELでactivexコントロールを...
-
ExcelVBAでListViewが使用できない
-
With~EndWithの省略部分と引数...
-
Groupboxの配下のコントロール...
-
VBAのフォームでTextBoxがいっ...
-
ACCESS2010のVBAでフォーム内ク...
-
WIN32でOCXを利用する方法を教...
-
Excel VBA 動的に作成したチェ...
-
コンボボックスの文字によるif...
-
エクセル IEをコピーし貼り付け...
-
アクセス特有の書き方?
-
ユーザーフォームで動的(Me.Con...
-
もしフォームヘッダーにコント...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
vb.netで画面のコントロールId...
-
エクセルVBAでオプションボタン...
-
EXCELでactivexコントロールを...
-
ExcelVBAでListViewが使用できない
-
excelのリストボックスで選択し...
-
ユーザーフォームで動的(Me.Con...
-
フォーム上の現在アクティブな...
-
C#で自分のウインド・ハンド...
-
変数をコントロール型で使用す...
-
VBAのフォームでTextBoxがいっ...
-
コントロールを移動できない
-
Groupboxの配下のコントロール...
-
C#で角が丸いテキストボックス
-
(VBA)スピンボタンの大量...
-
間違えて配置してしまったコン...
-
エクセル コントロールツール...
-
'ckbl' コントロールは作成され...
-
OCXって何ですか?
おすすめ情報