none
DataGridViewのButtonColumnについて RRS feed

  • 質問

  • いつもお世話になります。

    この度、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

    2007年2月20日 7:13

回答

  • trapemiya 様

     了解しました。 わざわざテストまでして頂き有難うございました。

     Style関係をもう少し調べてみます。

     ありがとうございます

    2007年2月21日 0:19

すべての返信

  • buttonNameはどこから来ていますか? buttonNameにきちんと表示したい文字列が入っていますか?
    2007年2月20日 7:26
    モデレータ
  • trapemiya様

     早速の返信有難うございます。

     buttonNameはデータベーステーブルからデータリーダで取得しています。

     デバック途中にブレークポイントを指定してウォッチしてみた所、

     Dim buttonCol = New DataGridViewButtonColumn で宣言した、buttonColには設定したプロパティが

     すべて入っている状態でした。

      Text = "検索"
        HeaderText = "検索ボタン"
        UseColumnTextForButtonValue = True
        FlatStyle = FlatStyle.Standard  ....

     しかし、表示されるDataGridViewには表示されない状態です。

     ソリューションを再作成してもダメでした。

     他になにか重要なプロパティがあるのでしょうか?

     

    2007年2月20日 7:45
  • いえ、それだけで表示されるはずです。
    ちなみに、.Text = "検索ボタン" と直接書くとどうなりますでしょうか?
    2007年2月20日 8:08
    モデレータ
  • 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スタイルでも大丈夫なのでしょうか?

     クラシックスタイルで実行してみても結果が同じだったので、関係ないと考えているのですが・・・

    2007年2月20日 8:36
  • ButtonだとXpのVisual Styleの影響を受けるようです。FlatStyleをStandard以外の、例えばFlatにすれば影響を受けなくなるようです。FlatStyleがStandardのままですと、VBの場合は、プロジェクトのプロパティに、「XP Visual スタイルを有効にする」があるので、それを外すと、ButtonでもVisual Styleの影響を受けなくなります。

    ただ、私の環境では、示されたコードを実行すると、ちゃんとボタンに検索という文字が表示されます。(検索の文字はハードコーディングしています) 通常は、このような動作をするものと思われます。

    2007年2月20日 9:56
    モデレータ
  • trapemiya 様

     了解しました。 わざわざテストまでして頂き有難うございました。

     Style関係をもう少し調べてみます。

     ありがとうございます

    2007年2月21日 0:19