デリゲートを共通で使いたいときなどに、senderのインスタンスにアクセスしたい時に次のような感じで、コンテナのControlsプロパティにNameを渡すことで、アクセス可能になります。
もちろんアクセスしたいコントロールのインスタンスは、キチンとした型にキャストしないと駄目です。
なので、デリゲート側でどの型のインスタンスにアクセスするか決めておかないとキャストが出来ないので駄目です。
デリゲートを共通で使いたいときなどに、senderのインスタンスにアクセスしたい時に次のような感じで、コンテナのControlsプロパティにNameを渡すことで、アクセス可能になります。
もちろんアクセスしたいコントロールのインスタンスは、キチンとした型にキャストしないと駄目です。
なので、デリゲート側でどの型のインスタンスにアクセスするか決めておかないとキャストが出来ないので駄目です。
サンプルコードは、フォームの直下にbutton1、button2、button3があり、panel1の中にbutton4、button5、button6を 置いた状態で行っています。
C#
namespace Project_ControlsKey { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //Formの直下にbutton1コントロールがあるか確認 bool blnRoot = this.Controls[(sender as Button).Name] == null ? false : true; MessageBox.Show(blnRoot.ToString() + " in root."); //panel1の直下にbutton1コントロールがあるか確認 bool blnPanel = this.panel1.Controls[(sender as Button).Name] == null ? false : true; MessageBox.Show(blnPanel.ToString() + " in panel1."); } private void button2_Click(object sender, EventArgs e) { //Formの直下にbutton2コントロールがあるか確認 bool blnRoot = this.Controls[(sender as Button).Name] == null ? false : true; MessageBox.Show(blnRoot.ToString() + " in root."); //panel1の直下にbutton2コントロールがあるか確認 bool blnPanel = this.panel1.Controls[(sender as Button).Name] == null ? false : true; MessageBox.Show(blnPanel.ToString() + " in panel1."); } private void button3_Click(object sender, EventArgs e) { //Formの直下にbutton3コントロールがあるか確認 bool blnRoot = this.Controls[(sender as Button).Name] == null ? false : true; MessageBox.Show(blnRoot.ToString() + " in root."); //panel1の直下にbutton3コントロールがあるか確認 bool blnPanel = this.panel1.Controls[(sender as Button).Name] == null ? false : true; MessageBox.Show(blnPanel.ToString() + " in panel1."); } private void button4_Click(object sender, EventArgs e) { //Formの直下にbutton4コントロールがあるか確認 bool blnRoot = this.Controls[(sender as Button).Name] == null ? false : true; MessageBox.Show(blnRoot.ToString() + " in root."); //panel1の直下にbutton4コントロールがあるか確認 bool blnPanel = this.panel1.Controls[(sender as Button).Name] == null ? false : true; MessageBox.Show(blnPanel.ToString() + " in panel1."); } private void button5_Click(object sender, EventArgs e) { //Formの直下にbutton5コントロールがあるか確認 bool blnRoot = this.Controls[(sender as Button).Name] == null ? false : true; MessageBox.Show(blnRoot.ToString() + " in root."); //panel1の直下にbutton5コントロールがあるか確認 bool blnPanel = this.panel1.Controls[(sender as Button).Name] == null ? false : true; MessageBox.Show(blnPanel.ToString() + " in panel1."); } private void button6_Click(object sender, EventArgs e) { //Formの直下にbutton6コントロールがあるか確認 bool blnRoot = this.Controls[(sender as Button).Name] == null ? false : true; MessageBox.Show(blnRoot.ToString() + " in root."); //panel1の直下にbutton6コントロールがあるか確認 bool blnPanel = this.panel1.Controls[(sender as Button).Name] == null ? false : true; MessageBox.Show(blnPanel.ToString() + " in panel1."); } } }
VB.NET
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'Formの直下にbutton1コントロールがあるか確認 Dim blnRoot As Boolean = If(Me.Controls.Item((CType(sender, Button).Name)) Is Nothing, False, True) MessageBox.Show(blnRoot.ToString() & " in root.") 'panel1の直下にbutton1コントロールがあるか確認 Dim blnPanel As Boolean = If(Me.Panel1.Controls.Item((CType(sender, Button).Name)) Is Nothing, False, True) MessageBox.Show(blnPanel.ToString() & " in panel1.") End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 'Formの直下にbutton2コントロールがあるか確認 Dim blnRoot As Boolean = If(Me.Controls.Item((CType(sender, Button).Name)) Is Nothing, False, True) MessageBox.Show(blnRoot.ToString() & " in root.") 'panel1の直下にbutton2コントロールがあるか確認 Dim blnPanel As Boolean = If(Me.Panel1.Controls.Item((CType(sender, Button).Name)) Is Nothing, False, True) MessageBox.Show(blnPanel.ToString() & " in panel1.") End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 'Formの直下にbutton3コントロールがあるか確認 Dim blnRoot As Boolean = If(Me.Controls.Item((CType(sender, Button).Name)) Is Nothing, False, True) MessageBox.Show(blnRoot.ToString() & " in root.") 'panel1の直下にbutton3コントロールがあるか確認 Dim blnPanel As Boolean = If(Me.Panel1.Controls.Item((CType(sender, Button).Name)) Is Nothing, False, True) MessageBox.Show(blnPanel.ToString() & " in panel1.") End Sub Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click 'Formの直下にbutton4コントロールがあるか確認 Dim blnRoot As Boolean = If(Me.Controls.Item((CType(sender, Button).Name)) Is Nothing, False, True) MessageBox.Show(blnRoot.ToString() & " in root.") 'panel1の直下にbutton4コントロールがあるか確認 Dim blnPanel As Boolean = If(Me.Panel1.Controls.Item((CType(sender, Button).Name)) Is Nothing, False, True) MessageBox.Show(blnPanel.ToString() & " in panel1.") End Sub Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click 'Formの直下にbutton5コントロールがあるか確認 Dim blnRoot As Boolean = If(Me.Controls.Item((CType(sender, Button).Name)) Is Nothing, False, True) MessageBox.Show(blnRoot.ToString() & " in root.") 'panel1の直下にbutton5コントロールがあるか確認 Dim blnPanel As Boolean = If(Me.Panel1.Controls.Item((CType(sender, Button).Name)) Is Nothing, False, True) MessageBox.Show(blnPanel.ToString() & " in panel1.") End Sub Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click 'Formの直下にbutton6コントロールがあるか確認 Dim blnRoot As Boolean = If(Me.Controls.Item((CType(sender, Button).Name)) Is Nothing, False, True) MessageBox.Show(blnRoot.ToString() & " in root.") 'panel1の直下にbutton6コントロールがあるか確認 Dim blnPanel As Boolean = If(Me.Panel1.Controls.Item((CType(sender, Button).Name)) Is Nothing, False, True) MessageBox.Show(blnPanel.ToString() & " in panel1.") End Sub End Class
良い | やや良い | 普通 | やや悪い | 悪い |
---|---|---|---|---|
1 | 0 | 0 | 0 | 0 |
投稿日時 | 評価 | コメント |
---|