- PR -

動的にイベントを追加した場合した場合の動作

投稿者投稿内容
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-01 16:11
引用:

Kazukiさんの書き込み (2006-03-01 12:33) より:
型の判定をしたいならis演算子やas演算子あたりを使うほうが
一般的かな。
コード:
if(e.Control is DataGridViewText....)
{
  // いろいろ
}
とか
DataGridViewTe... c = e.Control as Da....;
if(c != null)
{
  // いろいろ〜
}






is も as もわかりました。今後は、このように書きたいと思います。
ありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-01 16:30
引用:

R・田中一郎さんの書き込み (2006-03-01 11:27) より:

何れにせよ、この方法では、DataGridViewTextBoxColumn 列の編集で生じるイベント
を捕まえることはできないようですね。


あれ? 現状イベントは駆動しないんですか?
今の実装のままであれば複数回追加しないようにすれば良いと思いましたけど。
Bind 時のイベントではできないのかな...?

引用:

多分、上記はコンパイルが解決できないことに関する説明が記述されているのだと
思うのですが、僕にはこの意味が理解できませんでした。


Kazuki さんより既に回答がついているように、is 演算子を使ってください。

田中さんが検証で使っている "DataGridViewTextBoxColumn" はあくまで「文字列」です。
型から「型名」を取り出し、「文字列」と比較検証をしているに過ぎません。

この方法だとこの文字列にある型が有効であるか "コンパイル時" にチェックできません。
ですが、is 演算子であればコンパイル時にチェックできます。

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

じゃんぬねっとさんの書き込み (2006-03-01 16:30) より:
引用:

R・田中一郎さんの書き込み (2006-03-01 11:27) より:

何れにせよ、この方法では、DataGridViewTextBoxColumn 列の編集で生じるイベント
を捕まえることはできないようですね。


あれ? 現状イベントは駆動しないんですか?
今の実装のままであれば複数回追加しないようにすれば良いと思いましたけど。
Bind 時のイベントではできないのかな...?



いえ、イベントは捕まえられたんですが、複数回追加しないようにする方法がわから
なかったのです。
今は、じゃんぬねっとさんが以前書かれた TextBoxEx を参考にして、

DataGridViewTextBoxColumn
DataGridViewTextBoxCell
DataGridViewTextBoxEditingControl

の派生クラスを作って、こちらを使うようにしようと思っています。

引用:

じゃんぬねっとさんの書き込み (2006-03-01 16:30) より:

この方法だとこの文字列にある型が有効であるか "コンパイル時" にチェックできません。
ですが、is 演算子であればコンパイル時にチェックできます。



了解しました。今後は、is を使っていこうと思います。
ありがとうございました。

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