プロが教えるわが家の防犯対策術!

質問させていただきます。

現在、VB.net(2019)のDataGridViewで
列ヘッダーの複数行表示を行っています。

以下サイトを参考にすると複数行表示は出来ました。
[参考]https://masa49406.blogspot.com/2013/07/vbnet-dat …


ただ、特定の文字の場合のみヘッダから文字がはみ出てしまい、困っています、

--------------------------------------------------------------------
<再現方法>
・上記URLのソースをそのまま貼り付ける。
・「TextFormatFlags.EndEllipsis」を「TextFormatFlags.WordBreak」に変更する
  (ヘッダータイトルを改行したい)
・「Column5」という文言を「abcd測量」に変更する
・上記の設定で実行し、5列目の幅を狭めると
 「量」の文字の下部分がヘッダからはみ出て表示されてしまう
--------------------------------------------------------------------

「abc測量」では問題無いので「半角5文字+全角2文字」がだめなようです。

列を増やして横スクロースを動かしても、はみ出ている文字が表示され続けます。

さすがに見た目が悪いので消したいのですが、方法が分かっていません。


お手数をおかけしますが、よろしくお願いいたします。

A 回答 (2件)

よく理解できてないので不明ですが、


rect.Height -= lineWidth
に問題があるかと思います。
(なぜHeightを決定するのにWidthが関係してくるのか??)

試しに
rect.Height = 30
とリテラル指定すると、その範囲で折り返されて表示されます。
(リテラルにしたので、他の列の描画のことは置いておいて)
そのかわり、グルーピングされている列の境界線が残ります。
グルーピングした時の背景に関わる描画と文字列の描画では、
描画範囲が異なるはずなのに、一緒になっているのでおかしいです。

rect.Height -= lineWidth
では、heightが32になり、その2の分、文字列描画がはみ出しています。

X, Y, Width, HeightすべてにlineWidth(1固定)を扱って算出しているように見受けられますが、明らかにおかしいでしょう。

ColumnHeadersDefaultCellStyleによってフォントやサイズを変更するとまともに描画されません。

また、グリッド全体のクリックや列ヘッダーのクリックでちらつきまくります。
列ヘッダーをクリックしてソートした時に既定で表示されるはずの▼、▲についての考慮もありません。
列位置を手動で変更した場合に激しくもちらつきますし、グルーピングが求めたものと異なる状態に陥ります。

正直記事にあるのは、特定環境下でのみ問題がない実装、というものであり、どんな場面でも問題がないかと言えば考慮が足らないものです。
(記事の作成者も、完全なライブラリとして提供しているわけではない)

GrapeCity SPREAD for Windows FormsやInfragistics Ultimate UI for Windows Formsなどを購入した方がよほど安定した動作が見込まれます。
前者は買い切り可能、後者はInfragistics Professional以上としてサブスクリプション契約です。
https://www.grapecity.co.jp/developer/spread-win …
https://jp.infragistics.com/products/windows-forms

費用捻出ができないのなら、記事内容をあくまで参考として、自力で作り上げるか、そもそも諦めるかになります。
前者は冒頭から記した通り、様々な状況への対応も考えなければならないため、膨大な知識と時間がかかります。
時間も金もかけられないなら諦めた方が無難です。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

文字列の幅やレクタングルのサイズの微調整が難しいので
本当に買ったほうが早いですよね。。。

列幅分はみ出すをいうご意見をヒントに、
今回としては、半角全角の混ざった文字の場合に
文字数などを調整して上寄せすることで対応しました。

ありがとうございました。

お礼日時:2021/01/12 21:20

投稿者(作成者)へのコメントでは返事がなかったのでしょうか?


どこで何をしているのか?は作成された方が一番わかるかもですが。

既に連絡済みで回答がなかったと言うのならスル~してください。
    • good
    • 0
この回答へのお礼

返信ありがとうございます。
ブログを確認したところ、最終更新日がだいぶ前だったので
こちらで質問させていただきました。

時間がある場合は、問い合わせが確実かもしれませんね。

ご回答ありがとうございます。

お礼日時:2021/01/12 21:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A