C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: コントロールの自作イベントの配列化はできないのでしょうか?


(過去ログ 56 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■31853 / inTopicNo.1)  コントロールの自作イベントの配列化はできないのでしょうか?
  
□投稿者/ tamaboyo (29回)-(2009/01/29(Thu) 14:50:53)

分類:[C#] 

tamaboyoです。

DomainUpDownコントロールを元に、UpDownイベントをとれるようにしたコントロールを作成しました。
そのコントロールを複数使用するのですが、同じ動作をするものをコントロール配列にまとめようとしています。

そこで、配列
ExtendedDomainUpDown[] aDUD_ON = null;
を宣言し、Form_Loadで
ExtendedDomainUpDown[] arrON = { dudON_1, dudON_2, dudON_3, dudON_4, dudON_5 };
aDUD_ON = arrON;
とまとめました。
ここまでは問題なく進んだのですが、イベントハンドラの追加で
foreach (ExtendedDomainUpDown dud in arrON)
{
dud.Leave += new EventHandler(dudON_Leave);
dud.Enter += new EventHandler(dudON_Enter);
dud.UpDown += new EventHandler(dudON_UpDown);
}
としたところ、UpDownイベントの追加行で
"デリゲード'System.EventHandoler'に一致する'dudON_UpDown'のオーバーロードはありません"とエラーになります。
設定先のイベント関数は、纏める前に設定したイベント関数の関数名を変更しただけで実在します。
また、UpDownイベントの今日をコメントにすると、コンパイルは通り、実行すると関数を通ります。

コントロールを配列化学した場合、自作のイベントをイベントハンドラに追加することはできないのでしょうか?
もしくは追加方法が違うのでしょうか?

環境はVS2005です。
宜しくお願いします。
引用返信 編集キー/
■31855 / inTopicNo.2)  Re[1]: コントロールの自作イベントの配列化はできないのでしょうか?
□投稿者/ Hongliang (336回)-(2009/01/29(Thu) 15:03:45)
> "デリゲード'System.EventHandoler'に一致する'dudON_UpDown'のオーバーロードはありません"とエラーになります。
なんですから、dudON_UpDown メソッドとやらが EventHandler の要求する引数/返値の型を満たしてないんでしょう。
void dudON_UpDown(object sender, EventArgs e)になってますか?
// エラーメッセージはコピー&ペーストするのがいいですよ。
引用返信 編集キー/
■31858 / inTopicNo.3)  Re[1]: コントロールの自作イベントの配列化はできないのでしょうか?
□投稿者/ 魔界の仮面弁士 (973回)-(2009/01/29(Thu) 15:22:56)
No31853 (tamaboyo さん) に返信
> "デリゲード'System.EventHandoler'に一致する'dudON_UpDown'のオーバーロードはありません"とエラーになります。
「デリゲード」→ 「デリゲート」です。(delegate)


> 設定先のイベント関数は、纏める前に設定したイベント関数の関数名を変更しただけで実在します。
その自作 UpDown イベントの定義を確認してみてください。
そのイベントは、(object, EventArgs) になっていますでしょうか。

また、引数定義が object, EventArgs であったとしても、それが
 public event EventHandler<EventArgs> Event1;
 public event EventHandler Event2;
と宣言されていれば、
 //o.Event1 += new EventHandler(Sample);             // NG!
 o.Event1 += new EventHandler<EventArgs>(Sample);    // OK
 o.Event2 += new EventHandler(Sample);               // OK
となる事にも注意してみてください。

引用返信 編集キー/
■31859 / inTopicNo.4)  Re[2]: コントロールの自作イベントの配列化はできないのでしょうか?
□投稿者/ tamaboyo (30回)-(2009/01/29(Thu) 15:23:15)
No31855 (Hongliang さん) に返信

Hongliang さん、ありがとうございます。

>>"デリゲード'System.EventHandoler'に一致する'dudON_UpDown'のオーバーロードはありません"とエラーになります。
> なんですから、dudON_UpDown メソッドとやらが EventHandler の要求する引数/返値の型を満たしてないんでしょう。
> void dudON_UpDown(object sender, EventArgs e)になってますか?
> // エラーメッセージはコピー&ペーストするのがいいですよ。

イベント関数は
private void dudON_UpDown(object sender, ExtendedDomainUpDown.UpDownEventArgs e)
です。
これは、イベントを追加した際に自動で作成されたままです。
ExtendedDomainUpDownはDomainUpDownを使用して作ったものです。
引用返信 編集キー/
■31863 / inTopicNo.5)  Re[3]: コントロールの自作イベントの配列化はできないのでしょうか?
□投稿者/ 魔界の仮面弁士 (975回)-(2009/01/29(Thu) 15:30:15)
No31859 (tamaboyo さん) に返信
> イベント関数は
> private void dudON_UpDown(object sender, ExtendedDomainUpDown.UpDownEventArgs e)
> です。

であれば、+= new EventHandler(…) では駄目でしょうね。
EventHandler は (object, EventArgs) であって、(object, UpDownEventArgs) ではありませんから。


呼び出し側では無く、ExtendedDomainUpDown 側の UpDown の定義はどうなっていますか?
引用返信 編集キー/
■31864 / inTopicNo.6)  Re[2]: コントロールの自作イベントの配列化はできないのでしょうか?
□投稿者/ tamaboyo (31回)-(2009/01/29(Thu) 15:44:07)
No31858 (魔界の仮面弁士 さん) に返信

魔界の仮面弁士 さん、ありがとうございます。

> ■No31853 (tamaboyo さん) に返信
>>"デリゲード'System.EventHandoler'に一致する'dudON_UpDown'のオーバーロードはありません"とエラーになります。
> 「デリゲード」→ 「デリゲート」です。(delegate)

すみません、間違えてますね。
なぜかコピーができなかったので手打ちしました。。。

>>設定先のイベント関数は、纏める前に設定したイベント関数の関数名を変更しただけで実在します。
> その自作 UpDown イベントの定義を確認してみてください。
> そのイベントは、(object, EventArgs) になっていますでしょうか。
>
> また、引数定義が object, EventArgs であったとしても、それが
>  public event EventHandler<EventArgs> Event1;
>  public event EventHandler Event2;
> と宣言されていれば、
>  //o.Event1 += new EventHandler(Sample); // NG!
>  o.Event1 += new EventHandler<EventArgs>(Sample); // OK
>  o.Event2 += new EventHandler(Sample); // OK
> となる事にも注意してみてください。

確認してみたところ、
public delegate void UpDownEventHandler(object sender, UpDownEventArgs e);
public event UpDownEventHandler UpDown;
でした。
・・・object, EventArgsがないですね。
糸口が見えてきました。

ありがとうございます。
引用返信 編集キー/
■31865 / inTopicNo.7)  Re[4]: コントロールの自作イベントの配列化はできないのでしょうか?
□投稿者/ tamaboyo (32回)-(2009/01/29(Thu) 15:49:08)
補足です。

UpDownEventArgsクラスは、
public class UpDownEventArgs : EventArgs
{
//略
}
となっています。
ということは、UpDownEventArgs からEventArgsを取り出すことはできるのでしょうか?

引用返信 編集キー/
■31866 / inTopicNo.8)  Re[3]: コントロールの自作イベントの配列化はできないのでしょうか?
□投稿者/ 魔界の仮面弁士 (976回)-(2009/01/29(Thu) 16:14:25)
No31864 (tamaboyo さん) に返信
> >>"デリゲード'System.EventHandoler'に一致する'dudON_UpDown'のオーバーロードはありません"とエラーになります。
>>「デリゲード」→ 「デリゲート」です。(delegate)
> すみません、間違えてますね。
ついでに書くと、'System.EventHandoler' も間違いですね。

> なぜかコピーができなかったので手打ちしました。。。
通常は、[エラー一覧]を右クリックして [コピー]を選択するか、Ctrl + C でコピーできますが、
それができなかったという意味であれば、メモリ不足等の一時的な物なのかも知れませんね。


> public delegate void UpDownEventHandler(object sender, UpDownEventArgs e);
> public event UpDownEventHandler UpDown;
> でした。
であれば、+= new UpDownEventHandler(dudON_UpDown); と記述すれば OK です。

これには、入力ヒント(IntelliSense) を使うと楽でしょう。
下記のように、"+" "=" "TAB" "TAB" と打てば済みますので。
http://www.vb-user.net/junk/replySamples/2009.01.29.16.11/Event.png
引用返信 編集キー/
■31867 / inTopicNo.9)  Re[5]: コントロールの自作イベントの配列化はできないのでしょうか?
□投稿者/ 魔界の仮面弁士 (977回)-(2009/01/29(Thu) 16:22:37)
No31865 (tamaboyo さん) に返信
>     public class UpDownEventArgs : EventArgs
>     {
>     //略
>     }
> となっています。
> ということは、UpDownEventArgs からEventArgsを取り出すことはできるのでしょうか?

『EventArgsを取り出す』という言葉の意味が良く分かりませんが、それぞれは継承関係にありますので、
UpDownEventArgs を EventArgs に変換するために、下記のようなコードを書く事はできます。

 private void dudON_UpDown(object sender, ExtendedDomainUpDown.UpDownEventArgs e)
 {
  EventArgs e2 = e;
 }

引用返信 編集キー/
■31868 / inTopicNo.10)  Re[4]: コントロールの自作イベントの配列化はできないのでしょうか?
□投稿者/ tamaboyo (33回)-(2009/01/29(Thu) 16:30:09)
No31866 (魔界の仮面弁士 さん) に返信

魔界の仮面弁士 さん、ありがとうございます。

> 通常は、[エラー一覧]を右クリックして [コピー]を選択するか、Ctrl + C でコピーできますが、
> それができなかったという意味であれば、メモリ不足等の一時的な物なのかも知れませんね。

さきほどCtrl+Cが出来なかったのです。
いつもならCtrl+Cでコピーできるので、メモリでしょうか。

> であれば、+= new UpDownEventHandler(dudON_UpDown); と記述すれば OK です。
>
> これには、入力ヒント(IntelliSense) を使うと楽でしょう。
> 下記のように、"+" "=" "TAB" "TAB" と打てば済みますので。
> http://www.vb-user.net/junk/replySamples/2009.01.29.16.11/Event.png

TAB+TABで入力したところ、
+= new ExtendedDomainUpDown.UpDownEventHandler(dudON_UpDown)
となり、コンパイルが通り、動作も確認できました。
VS2005にはこんな便利なヒントが実装されているのですね!
ビックリしました。

ありがとうございましたm(_ _)m
解決済み
引用返信 編集キー/
■31938 / inTopicNo.11)  Re[6]: コントロールの自作イベントの配列化はできないのでしょうか?
□投稿者/ tamaboyo (35回)-(2009/01/30(Fri) 11:44:27)
No31867 (魔界の仮面弁士 さん) に返信

魔界の仮面弁士 さん、ありがとうございます。
確認が遅くなり申し訳ありません。

>>ということは、UpDownEventArgs からEventArgsを取り出すことはできるのでしょうか?
>
> 『EventArgsを取り出す』という言葉の意味が良く分かりませんが、それぞれは継承関係にありますので、
> UpDownEventArgs を EventArgs に変換するために、下記のようなコードを書く事はできます。
>
>  private void dudON_UpDown(object sender, ExtendedDomainUpDown.UpDownEventArgs e)
>  {
>   EventArgs e2 = e;
>  }

変換はそのまま=でOKなのですね。
なるほど、いろいろと勉強になります。

ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -