トップ回答者
DataGridViewのButtonColumnについて

質問
-
いつもお世話になります。
この度、DataGridViewにButtonColumnを追加しようと、プログラムコードを書いてみたのですが、
ボタンセルにテキストが表示されず、原因を調べても、それに見合う情報がないので、質問させて頂きました。
ボタン列は追加され、ヘッダーテキストも表示されますが、ボタンのテキストだけ表示されません。
コードは以下の通りです、それ以外はすべてデフォルトのままにしました。
すみませんが、ご教授ください、よろしくお願いします。
---------------------------------------------------------------------------------------
Public Sub setButtonColumn(ByVal headerName As String, _
ByVal buttonName As String)
Dim buttonCol = New DataGridViewButtonColumn
With buttonCol
.CellTemplate = New DataGridViewButtonCell
.Text = buttonName
.HeaderText = headerName
.UseColumnTextForButtonValue = True
.FlatStyle = FlatStyle.Standard
End With
DataGridView.Columns.Add(buttonCol)
End Sub
回答
すべての返信
-
trapemiya様
早速の返信有難うございます。
buttonNameはデータベーステーブルからデータリーダで取得しています。
デバック途中にブレークポイントを指定してウォッチしてみた所、
Dim buttonCol = New DataGridViewButtonColumn で宣言した、buttonColには設定したプロパティが
すべて入っている状態でした。
Text = "検索"
HeaderText = "検索ボタン"
UseColumnTextForButtonValue = True
FlatStyle = FlatStyle.Standard ....しかし、表示されるDataGridViewには表示されない状態です。
ソリューションを再作成してもダメでした。
他になにか重要なプロパティがあるのでしょうか?
-
trapemiya様
度々の返信有難うございます、.text="検索"と表記しても現象は同じです。
ただ、プロパティ的にはちゃんと設定されているようです、デバック用にセルクリックイベントに
Dim dgvCell As DataGridViewButtonColumn
dgvCell = Me.dgvEtcManual.Columns(e.ColumnIndex)
MessageBox.Show(dgvCell.Text)
と、コードを書いて、メッセージボックスに表示してみた所、こちらの設定した文字列を表示しました。考えられるのは、文字色が背景色と同色になっている、もしくは、行の幅が狭く切れてしまっている場合ですが。
行幅の場合はリサイズして、セルを大きくしてもTextの文字は表示されませんでした。
文字色の場合は、.CellTemplate.Style.ForeColor = Drawing.Color.Blackとコードを追加記入して試してみましたが、
やはりダメでした。
WindowsのスタイルとかはXPスタイルでも大丈夫なのでしょうか?
クラシックスタイルで実行してみても結果が同じだったので、関係ないと考えているのですが・・・
-
ButtonだとXpのVisual Styleの影響を受けるようです。FlatStyleをStandard以外の、例えばFlatにすれば影響を受けなくなるようです。FlatStyleがStandardのままですと、VBの場合は、プロジェクトのプロパティに、「XP Visual スタイルを有効にする」があるので、それを外すと、ButtonでもVisual Styleの影響を受けなくなります。
ただ、私の環境では、示されたコードを実行すると、ちゃんとボタンに検索という文字が表示されます。(検索の文字はハードコーディングしています) 通常は、このような動作をするものと思われます。