2008年1月28日月曜日

ダイアログっぽくDataGridViewセルの編集を行うために

伝票レイアウトセル(2) 編集コントロール その5で触っている、編集開始時の処理。
このときはDataGridViewのEditingPanelに対して直接コントロールを追加することによって、UserControlを継承した編集コントロールを利用するようにしていたんだけど。

ダイアログで行う場合は、当然この方法だとマズイ場面が。

・・・それはダイアログのサイズ

ダイアログで、となるとケースによっては元のセルよりも大きいものを利用する場面というのが当然でてくるわけで。
もっといってしまうと、親元のDataGridViewよりも大きいケースというのがありえるわけで。USのMSDNフォーラムにあるサンプルは「セルをダイアログの大きさに拡張する」という手法を使っているけど、それだとちとまずい。
(本当につきつめると親Formよりも・・・というのがあるんだよねぇ)

まぁそういうところがあるのでちょっと工夫する必要があるんだけど、今回は「親Formよりは小さいけどDataGridViewよりは大きいかも知れない」というケースまで対応する場合にどうするか、でいこうと思う。

んで、実は答えはすこぶる簡単。

Me.EditingControlDataGridView.TopLevelControl.Controls.Add(subEditorInstance)


これだけ。前はEditingPanelにAddしていたのを、「親DataGridViewの所属するTopLevelControl」に変更してあげればほとんどいける。実際は「表示する位置」の問題があるので、もう少しロジックはいるけどね。それは次回以降で。



ちなみにこの場合、AddするコントロールはTopLevel=FalseにしておかないとAddできないので注意。

0 件のコメント:

コメントを投稿