DOBON.NETプログラミング道掲示板
(現在 過去ログ1 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■32993 / inTopicNo.1)  DataGridView上のカスタムセルの表示位置ずれ
  
□投稿者/ ルーカス 一般人(6回)-(2015/06/16(Tue) 16:13:26)
  • アイコン環境/言語:[Windows7 32bit VB.NET .NET Framework4.0] 
    分類:[.NET] 

    下記サイトを参考にしてDataGridViewにMaskedTextBoxを表示し、日付を入力させています。
    http://dobon.net/vb/dotnet/datagridview/maskedtextboxcolumn.html

    ※DataGridViewMaskedTextBoxEditingControlクラスのメンバ「ApplyCellStyleToEditingControl」に下記一文だけ追加しました。
     → Me.BorderStyle = Windows.Forms.BorderStyle.None


    フォームを起動すると、テキストボックスの表示位置がセルの左上に寄ってしまいました。
    カスタマイズしていない他のテキストボックスと同様の位置に表示させる方法はありますでしょうか?
    カスタマイズしたセル、カスタマイズしていないセル、どちらもPaddingは0にしています。
    よろしくお願いいたします。

1207×714 => 250×147
イメージ
1434438806.png
/25KB
引用返信 削除キー/
■32997 / inTopicNo.2)  Re[1]: DataGridView上のカスタムセルの表示位置ずれ
□投稿者/ ぴーち 一般人(1回)-(2015/06/26(Fri) 21:53:05)
  • アイコンAlignmentをNotsetではなくMiddleLeftにしてもダメですか?
引用返信 削除キー/
■32998 / inTopicNo.3)  Re[2]: DataGridView上のカスタムセルの表示位置ずれ
□投稿者/ ルーカス 一般人(7回)-(2015/06/27(Sat) 12:47:15)
  • アイコンNo32997に返信(ぴーちさんの記事)
    > AlignmentをNotsetではなくMiddleLeftにしてもダメですか?

    Alignmentはボックス内のテキストの位置になりますので、
    ボックスそのものの位置ずれは変わりありませんでした。
    (参考までにAlignmentをMiddleCenterにした画像を添付します)

    OnPaintメソッドで自分で描画するしかないのかな…?とも考えましたが、
    自分にそこまでのレベルが無いもので…(汗)

1179×713 => 250×151
イメージ
1435376835.png
/32KB
引用返信 削除キー/
■32999 / inTopicNo.4)  Re[1]: DataGridView上のカスタムセルの表示位置ずれ
□投稿者/ 魔界の仮面弁士 大御所(972回)-(2015/06/27(Sat) 15:23:58)
  • アイコン2015/06/27(Sat) 15:24:38 編集(投稿者)

    No32993に返信(ルーカスさんの記事)
    >  → Me.BorderStyle = Windows.Forms.BorderStyle.None
    位置調整が必要な場合は、DataGridViewMaskedTextBoxCell にて、
    PositionEditingControl メソッドをオーバーライドして、
    cellBounds の位置とサイズを数ドット分調整してみて下さい。

    厳密には、セルスタイルの Alignment に応じた調整が必要になりますし、
    エラーアイコンの位置なども含め、さらに細々とした調整が入りますが、
    とりあえずは上記だけでも。
引用返信 削除キー/
■33003 / inTopicNo.5)  Re[2]: DataGridView上のカスタムセルの表示位置ずれ
□投稿者/ ルーカス 一般人(8回)-(2015/06/28(Sun) 18:03:25)
  • アイコンNo32999に返信(魔界の仮面弁士さんの記事)

    > 位置調整が必要な場合は、DataGridViewMaskedTextBoxCell にて、
    > PositionEditingControl メソッドをオーバーライドして、

    返信ありがとうございます。
    難しそうですが、やってみようと思います。
    時間が掛かると思いますが結果はまたこちらでご報告させていただきます。
    ひとまず、ありがとうございました。
引用返信 削除キー/
■33025 / inTopicNo.6)  Re[3]: DataGridView上のカスタムセルの表示位置ずれ
□投稿者/ ルーカス 一般人(15回)-(2015/07/02(Thu) 19:56:22)
  • アイコン
    PositionEditingControl メソッドをオーバーライドし、試してみました。
    以下がそのソースです。
    
    Public Overrides Sub PositionEditingControl(setLocation As Boolean, _
     setSize As Boolean, _
     cellBounds As Rectangle, _
     cellClip As Rectangle, _
     cellStyle As DataGridViewCellStyle, _
     singleVerticalBorderAdded As Boolean, _
     singleHorizontalBorderAdded As Boolean, _
     isFirstDisplayedColumn As Boolean, _
     isFirstDisplayedRow As Boolean)
    
        Dim editCellBounds As Rectangle = cellBounds
        Dim controlHeight As Integer = Me.DataGridView.EditingControl.Bounds.Height
        Dim rowHeight As Integer = Me.DataGridView.Rows.SharedRow(RowIndex).Height
    
        rowHeight -= Me.DataGridView.Columns(OwningColumn.Index).DefaultCellStyle.Padding.Vertical
        If rowHeight > controlHeight Then
            Dim diff As Integer = CInt((rowHeight - controlHeight) / 2) '高さの差を÷2する
            editCellBounds.Height -= diff
            editCellBounds.Y += diff
        End If
    
        '編集用コントロールの境界線が無い場合、境界線ありの時と比べてテキストの位置が少し上がる。
        'このため、少し位置を下げる。
        Dim editCtl As DataGridViewMaskedTextBoxEditingControl = TryCast(Me.DataGridView.EditingControl, DataGridViewMaskedTextBoxEditingControl)
        If editCtl.BorderStyle = BorderStyle.None Then
            editCellBounds.Height -= 1
            editCellBounds.Y += 1
        End If
    
        MyBase.PositionEditingControl(setLocation, _
         setSize, _
         editCellBounds, _
         editCellBounds, _
         cellStyle, _
         singleVerticalBorderAdded, _
         singleHorizontalBorderAdded, _
         isFirstDisplayedColumn, _
         isFirstDisplayedRow)
    
    End Sub
    
    
    大筋ではうまくいきましたが、細々した問題点が2つありました。
    ・背景に灰色で色が塗られてしまう。(…他のセルと違ってしまうので、他のセルと同じにしたい)
    ・当該セルに初めてフォーカスを当てた時(初めて編集用コントロールが表示された時)、Top位置が想定よりやや上になってしまいます。
     一旦他の行にフォーカスを移動してあげると、想定したTop位置になってくれます。
    
    もし対処法があればご教示いただけるとありがたいです。
    よろしくお願いいたします。
    
    

引用返信 削除キー/
■33026 / inTopicNo.7)  Re[4]: DataGridView上のカスタムセルの表示位置ずれ
□投稿者/ ルーカス 一般人(17回)-(2015/07/02(Thu) 19:58:52)
  • アイコンNo33025 の画像を添付します。

1262×704 => 250×139
イメージ
1435834732.png
/40KB
引用返信 削除キー/
■33027 / inTopicNo.8)  Re[5]: DataGridView上のカスタムセルの表示位置ずれ
□投稿者/ ルーカス 一般人(25回)-(2015/07/02(Thu) 20:08:54)
  • アイコンすみません、もう1つ画像があるのですが、14KBなのにファイルサイズの制限に引っ掛かってしまいアップできません・・・。
    少し時間を置いてからまたアップします。
引用返信 削除キー/
■33028 / inTopicNo.9)  Re[4]: DataGridView上のカスタムセルの表示位置ずれ
□投稿者/ 魔界の仮面弁士 大御所(978回)-(2015/07/02(Thu) 20:41:15)
  • アイコンNo33025に返信(ルーカスさんの記事)
    > もし対処法があればご教示いただけるとありがたいです。

    直接の回答では無いのですが、
    http://referencesource.microsoft.com
    にて、基本の DataGridViewTextBoxCell の実装が
    どうなっているのか確認してみては如何でしょうか。
引用返信 削除キー/
■33029 / inTopicNo.10)  Re[6]: DataGridView上のカスタムセルの表示位置ずれ
□投稿者/ 魔界の仮面弁士 一般人(2回)-(2015/07/02(Thu) 20:44:31)
  • アイコン2015/07/02(Thu) 20:44:48 編集(投稿者)

    No33027に返信(ルーカスさんの記事)
    > すみません、もう1つ画像があるのですが、14KBなのにファイルサイズの制限に引っ掛かってしまいアップできません・・・。

    このスレッドにはもう貼れそうに無いですね…。

    》 6) スレッド内の合計ファイルサイズ:[99/100KB] 残り:[1KB]

    画像が必要であれば、別スレッドを立て直すか、もしくは
    別サイト(OneDriveなど)にアップして、その URL を貼るなどで
    回避してみてください。
引用返信 削除キー/
■33032 / inTopicNo.11)  Re[7]: DataGridView上のカスタムセルの表示位置ずれ
□投稿者/ 管理人 大御所(1520回)-(2015/07/03(Fri) 01:29:00)
  • アイコンNo33029に返信(魔界の仮面弁士さんの記事)
    > このスレッドにはもう貼れそうに無いですね…。
    >
    > 》 6) スレッド内の合計ファイルサイズ:[99/100KB] 残り:[1KB]

    スレッド内の合計ファイルサイズの制限を300KBに増やしました。
    14KBの画像であれば、引き続きこのスレッドにご投稿いただけます。
    ご迷惑をおかけして、申し訳ありませんでした。
引用返信 削除キー/
■33035 / inTopicNo.12)  Re[8]: DataGridView上のカスタムセルの表示位置ずれ
□投稿者/ ルーカス 一般人(26回)-(2015/07/03(Fri) 14:52:59)
  • アイコン管理人様

     ファイルサイズを増やしていただいたとの事、ありがとうございました。m(_ _)m

    魔界の仮面弁士様

     >http://referencesource.microsoft.com
     >にて、基本の DataGridViewTextBoxCell の実装が
     >どうなっているのか確認してみては如何でしょうか。

     こんなサイトがあったのですね。とても勉強になります。有益な情報をありがとうございます。
     私のレベルでは少し難しいのですが(英語&C#というのが余計に…)、勉強させていただきます。


    もう少し色々と調べてみたいなと思い、残りの画像アップは取り止めますね。(管理人様、スミマセン)
    時間が掛かりそうですが、またこちらでご報告させていただきます。

     
     
引用返信 削除キー/
■33037 / inTopicNo.13)  Re[5]: DataGridView上のカスタムセルの表示位置ずれ
□投稿者/ ルーカス 一般人(27回)-(2015/07/05(Sun) 12:44:47)
  • アイコン「背景に灰色で色が塗られてしまう」という問題が解決したのでご報告します。

    編集用コントロールの背景色の設定は EditingControlクラスの ApplyCellStyleToEditingControl メソッドで行っていて、

    Me.BackColor = dataGridViewCellStyle.BackColor

    としているのですが、この時 dataGridViewCellStyle.BackColor はEmpty値になっていました。(⇒このため、Me.BackColor は既定値の「灰色」のまま)

    dataGridViewCellStyle.BackColor がEmpty値になっている原因は、すみません、私のプログラミングミスによるものでした。



    「初めて編集用コントロールが表示された時にTop位置が想定よりやや上になってしまう」という問題は、まだ原因が分かっておりません。







引用返信 削除キー/
■33043 / inTopicNo.14)  Re[6]: DataGridView上のカスタムセルの表示位置ずれ
□投稿者/ ルーカス 一般人(28回)-(2015/07/07(Tue) 13:47:16)
  • アイコン2015/07/07(Tue) 13:49:41 編集(投稿者)

    「初めて編集用コントロールが表示された時にTop位置が想定よりやや上になってしまう」という問題について、

    (1) cellBounds のY座標やHeightを調整
    (2) ベースの PositionEditingControl メソッドを実行

    としていたのを、

    (1) ベースの PositionEditingControl メソッドを実行
    (2) Me.DataGridView.EditingPanel.Bounds のY座標やHeightを調整

    とする事で解決しました。
    アドバイス頂き、ありがとうございました。


解決み!
引用返信 削除キー/



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

このトピックに書きこむ

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

Mode/  Pass/


- Child Tree -