- PR -

継承フォーム元で定義された DataGridView のプロパティが変更できない

投稿者投稿内容
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2006-06-15 08:53
Visual Studio 2005(C#2.0)にて、親フォームにて、DataGridView を定義し、Modifier を protected にします。

子フォームを親フォームを継承して作成すると、DataGridView が画面に現れますが、DataGridView のいかなるプロパティも変更できません。

Modifier が private であればこの現象は理解できますが、protected であればプロパティの変更はできるはずですよね?(事実、ボタンなどのほかのコントロールのプロパティは変更できます)

どなたか解決方法のわかる方、教えて下さい。

[ メッセージ編集済み 編集者: Shin 編集日時 2006-06-15 09:00 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-15 09:17
こちらと同じ内容でしょうか。

  [VB2005] DataGridView を貼った Form を継承できない

# 継承 + DataGridView で検索しました。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2006-06-15 09:29
じゃんぬねっとさん、お返事ありがとうございます。

フィードバックを追ってみましたが、デザイナでは無理でコードで処理しないといけないようですね。。。

フォームを作るプログラマ達に楽をしてもらうように親フォームを作っていたのですが、子フォームの方でデザイナが使えず、楽どころか面倒になってしまうのでは本末転倒ですね。ちょっと考え直すことにします。ありがとうございました。
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2006-06-15 10:22
自己レスです。

子フォームでグリッドのデザインができないのは厳しいので、以下の方法で対応しました。

・親フォームに DataGridView の型だけを定義

この型に対し共通の処理を行うメソッド・イベントを親フォームに定義

・親フォームに InitializeDataGridView(DataGridView) メソッドを作成

このメソッドは子フォームの Load イベントで呼び出される。

引数には子フォームの DataGridView が渡され、
親フォームに定義された DataGridView の型から参照させる。

また、親フォームに定義されたイベントを DataGridView に追加する。

・子フォームを作成するプログラマは DataGridView のデザインとデータソースを設定し、InitializeDataGridView() に自分の DataGridView を引数として渡し呼び出す

とりあえずこれで問題なくいけそうですが、何か無駄な事をしている用な気がします。お気づきの点がありましたらご助言ください。


[ メッセージ編集済み 編集者: Shin 編集日時 2006-06-15 10:25 ]
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-06-15 10:26
なんとなく DataGrid のカスタムコントロールを作成して
それを使ってもらったほうが良いような気がします。
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2006-06-16 03:21
かるあさん、コメントありがとうございます。

カスタムコントロール作成し、子フォームに設置する方法を検討してみましたが、イベントに関してはカスタムグリッドに追加できたのですが、親フォームからグリッドを使用して呼ばれる処理は子フォームのグリッドを親が知っていなくては実現できず、かといって親フォームにカスタムグリッドを付けてしまっては子フォームではグリッドをデザインできず、問題は残りました。

ですのでカスタムコントロールはやめ、とりあえず前述の方法で進めてみようと思っています。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-06-16 09:36
引用:

Shinさんの書き込み (2006-06-16 03:21) より:

カスタムコントロール作成し、子フォームに設置する方法を検討してみましたが、イベントに関してはカスタムグリッドに追加できたのですが、親フォームからグリッドを使用して呼ばれる処理は子フォームのグリッドを親が知っていなくては実現できず、かといって親フォームにカスタムグリッドを付けてしまっては子フォームではグリッドをデザインできず、問題は残りました。


ですので、小フォームにそのカスタム型の参照を返すだけの Interface を実装してはどうでしょうか?
'カスタム コントロールの型' で戻り値を指定しておけば、コンパイル解決できます。

親フォームからは、子フォームがその Interface を実装しているかで判断できます。

# と、こういう意味ではないですか?

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

Shinさんの書き込み (2006-06-16 03:21) より:

カスタムコントロール作成し、子フォームに設置する方法を検討してみましたが、イベントに関してはカスタムグリッドに追加できたのですが、親フォームからグリッドを使用して呼ばれる処理は子フォームのグリッドを親が知っていなくては実現できず、かといって親フォームにカスタムグリッドを付けてしまっては子フォームではグリッドをデザインできず、問題は残りました。


子フォームのカスタムコントロールの参照を親フォームに渡すのは駄目なんでしょうか?

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