- PR -

コントロールのデフォルトなイベントの指定方法

投稿者投稿内容
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-27 14:09
デザイナからコントロールをダブルクリックすると、そのコントロールの良く使うイベント?、が追加される訳ですが、自作したコントロールで自作したイベントで同様に行いたい場合は、どのように指定すれば良いのでしょうか?

VBのプロパティだと default って書いた気がしましたが・・・C# だと無理っぽいですし^^;
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2006-05-27 16:21
こんな具合で感じできます。
コード:
[DefaultEvent("Hoge")]
public class MyControl : ..... {
  public event EventHandler Hoge;
}

R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-27 17:15
引用:

Kazukiさんの書き込み (2006-05-27 16:21) より:

こんな具合で感じできます。



できました。ありがとうございました。
・・・同様にDefaultPropertyも指定できますが、僕はてっきり this で指定すれば良いのだとばかり思っていました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-27 22:23
引用:

R・田中一郎さんの書き込み (2006-05-27 14:09) より:

VBのプロパティだと default って書いた気がしましたが・・・C# だと無理っぽいですし^^;


それ、インデクサと何かを混同していませんか...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-28 08:58
引用:

じゃんぬねっとさんの書き込み (2006-05-27 22:23) より:

それ、インデクサと何かを混同していませんか...


いろいろと混同しているかもしれません・・・

デフォルトイベントでインデクサがないのは重々承知しているのですが、デフォルトプロパティに関しては、[DefaultProperty("でほるとぷろぱ亭")]と指定できるようになっている意味がわからないです( ̄△ ̄?)

デフォルトプロパティにできるのはインデックスを引数に与えられるものとなっていますが、これは VB ならプロパティの宣言自身に default と付ければ良かったと記憶しています。C# では this[] が同じ役割になるかと思っていたからです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-28 13:19
引用:

R・田中一郎さんの書き込み (2006-05-28 08:58) より:

いろいろと混同しているかもしれません・・・


少なくとも、デフォルト イベントとデフォルト プロパティ (インデクサ) は同じではありませんよね。
スレッドの最初の投稿に、違和感があっただけなんですよ。(;^-^)

引用:

デフォルトプロパティに関しては、[DefaultProperty("でほるとぷろぱ亭")]と指定できるようになっている意味がわからないです( ̄△ ̄?)


「PropertyGrid」というキーワードも混ぜて検索してみてください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-28 16:41
あ、結局のところ、System.Reflection.DefaultMemberAttribute という属性が正解になります。
この属性の役割を、DefaultPropertyAttribute の役割だと勘違いしているのだと思います。(多分)

ところで、同じ属性でも、適用するのが C# か VB かで、多少都合が違っていたりしますね。
VB ではインデックス付きのプロパティを完全にサポートしていますが、
C# ではサポートしていないことによる事情なのでしょう。

それと、VB ではプロパティ名としてインデクサの名前を指定できますが、
C# ではできない (this という指定しかできない) なんて違いもありますね。

C# では名前は重要ではない (使用側で使用されることがない) からでしょう。
逆に、VB は、プロパティ名を指定した呼び出し "も" サポートしているから... でしょうか?

C# のインデクサは規定の「Item」というプロパティ名が使われますが、
変更したい場合は、System.Runtime.CompilerServices.IndexerNameAttribute という属性を使います。

VB みたいに、キーワード + 名前という制約の方がわかりやすいと思うんですけどねw

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-28 17:45
引用:

じゃんぬねっとさんの書き込み (2006-05-28 13:19) より:

「PropertyGrid」というキーワードも混ぜて検索してみてください。


あっ、そういうことだったんですね。
PropertyGrid に影響するものだったとは・・・考えてみればイベントもそうですもんね。
これが分かれば、本当にごっちゃになっていたことが自分でもよくわかります。
いつもさり気ないヒントをありがとうございます。

引用:

じゃんぬねっとさんの書き込み (2006-05-28 16:41) より:

ところで、同じ属性でも、適用するのが C# か VB かで、多少都合が違っていたりしますね。


そうなんですよね。
C#に引っ越してきたばかりの頃(つい最近ですがw)プロパティの指定の仕方がわからなくて一瞬焦りました。
VB6 の頃からデフォルトプロパティは多用していたため、下記の記述は最初から多用していたんです。

コード:
C#
public string this[int index]

VB
Default Public Property ぷろぱ亭(ByVal index As Integer) As String



今回は、この書き方の違いも混乱の原因になってますです・・・
問題なのは、ぷろぱ亭という記述を C# に用いる場合が起こりうるかどうかですね。

スキルアップ/キャリアアップ(JOB@IT)