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

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

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

Re[4]: MouseDownイベントのdelegateについて


(過去ログ 57 を表示中)

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

■32422 / inTopicNo.1)  MouseDownイベントのdelegateについて
  
□投稿者/ tamaboyo (50回)-(2009/02/06(Fri) 13:34:44)

分類:[C#] 

tamaboyoです。
ただいま、VB6製のコンポーネントをC#に移植中です。

VB6で、PictureBox上でのマウスイベントを
RaiseEvent MouseDown(Button, Shift, X, Y)
しているのをC#で作成しようとしています。
宣言は
Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
です。

今C#で宣言を
public delegate void mousedown(object sender, MouseEventArgs e);
RaiseEventの部分を
if (MouseDown != null)
{
OnMouseDown(e);
}
としたところ、
「イベント 'System.Windows.Forms.Control.MouseDown' は += または -= の左側にのみ表示されます。」
とエラーが出ました。
delegateのときにはイベントを追加または削除してやらないとdelegateの意味がないのでしょうか?
delegateで削除されるのではないのでしょうか?

環境はVS2005です。
宜しくお願いします。
引用返信 編集キー/
■32423 / inTopicNo.2)  Re[1]: MouseDownイベントのdelegateについて
□投稿者/ επιστημη (1667回)-(2009/02/06(Fri) 13:40:42)
επιστημη さんの Web サイト
> 今C#で宣言を
> public delegate void mousedown(object sender, MouseEventArgs e);
> RaiseEventの部分を
> if (MouseDown != null)
> {
> OnMouseDown(e);
> }

で、eventは?

引用返信 編集キー/
■32424 / inTopicNo.3)  Re[1]: MouseDownイベントのdelegateについて
□投稿者/ .SHO (655回)-(2009/02/06(Fri) 13:48:57)
No32422 (tamaboyo さん) に返信

もうちょっと頑張るなり考えるなりしてから質問した方がいいです。
引用返信 編集キー/
■32429 / inTopicNo.4)  Re[2]: MouseDownイベントのdelegateについて
□投稿者/ tamaboyo (51回)-(2009/02/06(Fri) 14:21:57)
επιστημη さん、ありがとうございます。

>>public delegate void mousedown(object sender, MouseEventArgs e);
>>RaiseEventの部分を
>> if (MouseDown != null)
>> {
>> OnMouseDown(e);
>> }
>
> で、eventは?

すみません、抜けていました。
public event mousedown MouseDown;
を宣言の下に記載ています。
また、RaiseEventの部分に
MouseDown +=new mousedown(MouseDown);
を追加しました。
先ほどのエラーは出なくなったのですが、宣言部分に
「'Edit.BitEdit.MouseDown' は継承されたメンバ 'System.Windows.Forms.Control.MouseDown' を非表示にします。非表示にする場合は、new キーワードを使用してください。」
の警告が出るようになりましたので、宣言を
public new event mousedown MouseDown;
に変更したところエラー、警告ともになくなりました。


元々のMouseDownイベントを削除したい→delegate
delegateしたイベントはnewで再宣言してやらなきゃならない、
コントロールのMouseDownイベントで元々のMouseDownイベントを発生させないために、
元々のMouseDownイベントを再宣言したMouseDownイベントにnewで追加してやる。

C#ではこういう流れでVB6のRaiseEventを実装、という流れの考え方であっていますでしょうか?
引用返信 編集キー/
■32430 / inTopicNo.5)  Re[2]: MouseDownイベントのdelegateについて
□投稿者/ tamaboyo (52回)-(2009/02/06(Fri) 14:23:52)

> もうちょっと頑張るなり考えるなりしてから質問した方がいいです。

不勉強・無理解で申し訳ありません。
一応、昨日から頑張っていたのですが、いろいろ試せば試すほど分からなくなっていました。
申し訳ありません。
引用返信 編集キー/
■32433 / inTopicNo.6)  Re[3]: MouseDownイベントのdelegateについて
□投稿者/ επιστημη (1668回)-(2009/02/06(Fri) 14:50:45)
επιστημη さんの Web サイト
2009/02/06(Fri) 14:51:01 編集(投稿者)
「コンポーネント内にPictureBoxを貼り、PictureBox上でMouseDownが起こったら
 そのコンポーネントそのものにMouseDownが起こったかのように見せかけたい」

のですか?

ならば:
        // PictureBoxにMouseDownしたときのハンドラ
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            OnMouseDown(e);
        }
これでおしまい。

違うならちゃんと説明してくださいまし。

引用返信 編集キー/
■32466 / inTopicNo.7)  Re[4]: MouseDownイベントのdelegateについて
□投稿者/ tamaboyo (53回)-(2009/02/06(Fri) 17:11:35)
επιστημη さん、ありがとうございます。

> 「コンポーネント内にPictureBoxを貼り、PictureBox上でMouseDownが起こったら
>  そのコンポーネントそのものにMouseDownが起こったかのように見せかけたい」
>
> のですか?

です。
Downで位置を補足し、最終的にUpした範囲を線で囲むので、イベントが起きたかのように見せかけたいのです。


> ならば:
> // PictureBoxにMouseDownしたときのハンドラ
> private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
> {
> OnMouseDown(e);
> }
> これでおしまい。

宣言をそのままで、上記のようにしたら解決しました。
エラーに振り回されて余計なところにはまっていきかけていたようですね。

すみません、ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -