
こんにちは。ユーザーコントロール内のボタンをクリックした時、そのユーザーコントロールをおいている親フォーム側で、それを知るにはどのようにすればよいでしょうか?
----------------------------------------------------------------------
[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# 画面のちらつきを解消したい
その他(プログラミング・Web制作)
-
-
4
C# 子のコントロールからイベントを送る方法?
C言語・C++・C#
-
5
visualstudio C# テキストボックスの数値を取得して計算する方法を教えてください。
Microsoft ASP
-
6
C#でButtonのフォーカス枠を消したいのですが
C言語・C++・C#
-
7
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
-
8
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
9
構造体のメンバをfor文で回したい
C言語・C++・C#
-
10
DataTableに入っているデータを全てinsertしたい!(C#)
Microsoft ASP
-
11
C#でフォームのオブジェクト名を変数名で指定
C言語・C++・C#
-
12
CloseとDisposeの違い
Visual Basic(VBA)
-
13
コンボボックス ▼ボタンをクリックしたらイベント
PowerPoint(パワーポイント)
-
14
【C#】DataGridViewの最大列数について
システム
-
15
GridviewとDataGridviewの違い
Microsoft ASP
-
16
インスタンス参照でアクセスできない。代わりに型名?
C言語・C++・C#
-
17
C# ReadOnlyのTextBoxで
C言語・C++・C#
-
18
C#でのProcess.Startと変数path
その他(プログラミング・Web制作)
-
19
Loadイベント中にほかのイベントを発生したくない
その他(プログラミング・Web制作)
-
20
C# 超初心者です。 this.Refresh();という文を使いたいです
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル・VBA CheckBoxのオブ...
-
エクセルVBAでオプションボタン...
-
チェックボックスをオンにした...
-
変数をコントロール型で使用す...
-
ExcelVBAでListViewが使用できない
-
Visual Basic 6.0 でPanelを使...
-
間違えて配置してしまったコン...
-
Toolbarボタンをフラットにした...
-
Excel VBA で Richtextboxを使...
-
VB.NET開発。ラジオボタンとコ...
-
LCD 1602ディスプレイの輝度調...
-
ユーザーフォームで動的(Me.Con...
-
エクセルVBAユーザーフォーム・...
-
C# ユーザコントロール内のボタ...
-
ActiveXコントロールはどこへい...
-
VB.NET 動的コントロールの存在...
-
TabStripコントロールの上にLab...
-
全てのオブジェクトのプロパテ...
-
複数のコマンドボタン(VBAで)...
-
EXCELでactivexコントロールを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELでactivexコントロールを...
-
エクセル・VBA CheckBoxのオブ...
-
カメラスクロールするのを動画...
-
エクセルVBAでオプションボタン...
-
チェックボックスをオンにした...
-
VBA ユーザーフォームの Keypre...
-
chr関数の呼び出しで「プロ...
-
'ckbl' コントロールは作成され...
-
ExcelVBAでListViewが使用できない
-
全てのオブジェクトのプロパテ...
-
vb.netで画面のコントロールId...
-
間違えて配置してしまったコン...
-
変数をコントロール型で使用す...
-
エクセル コントロールツール...
-
ユーザーフォームで動的(Me.Con...
-
OCXって何ですか?
-
C#で角が丸いテキストボックス
-
Groupboxの配下のコントロール...
-
Labelコントロールの(左右)余...
-
excel vbaでユーザーフォームに...
おすすめ情報