ショボ短歌会

VB2008 DataGridViewDisableButtonで困っています。
ボタン表示、Enabled判定が上手く出来ません。

VB2008初心者です。

MSDNの「方法 : Windows フォーム DataGridView コントロールのボタン列にあるボタンを無効にする」
http://msdn.microsoft.com/ja-jp/library/ms171619 …  を参考にしてプログラムを作成しようとしています。

上記のページに書かれている方法は、チェックボックスの値でボタンのEnabledを操作していますが、
そこの部分を変更し、カラム1の内容によってEnabledを操作したいと思っています。

作り:
フォーム1からフォーム2を開く。
フォーム2のDataGridViewにはカラム1、カラム2はフォームデザイン時に既に設定していて、
フォーム2のLOAD時に「DataGridViewDisableButtonColumn」を追加して、Enabledを判定しています。

殆どを上記サイトから引用しており、上記サイトの「Public Class DataGridViewDisableButtonColumn」以下はそのまま使用しています。

困っている現象:
最初にフォーム2を開いた際には、ボタンのテキストの表示、Enabledの判定も上手く出来ています。
ところが、一度フォーム2を閉じて、再度同じ条件で、フォーム2を開くと、ボタンは表示されますが、ボタンのテキストも表示されてなく、真っ白(ボタンの色)で、Enabledも判定出来ていません。

試した策:
フォーム2を閉じる際に、LOAD時に追加したDataGridViewDisableButtonColumnの削除を追加してみましたが、結果はかわりませんでした。

msdnから引用した内容については、ボタンのイメージを描画していると考えています。
フォームを閉じる際に、このボタンイメージを削除する必要があるのでしょうか?
フォーム1での条件によって、データ量が異なるため、DataGridViewが便利と思い使用しています。

上記の現象を回避するにはどの様な処理を加えればよいでしょうか?
ご教示お願いします。

A 回答 (1件)

その現象を確認できる最小手順とコードおよびデータを公開しましょう



Form2のLoadイベントなどで判定しているのであればその判定が期待通り動作しているのか
ステップ実行などで追いかける必要があると思いますよ

この回答への補足

redfox63さんありがとうございます。
以下がLOAD時のコードと、ロード時に取得するデータ例です。
よろしくお願いします。
名前 生年月日 住所有無(FLAG)
花子 19800630     1
太郎 19801122    0
---
Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Windows.Forms.VisualStyles
Public Class Form2
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.DATATABLEADAPTER.FillBy(Me.DSET.DTABLE, CODE)
Call DATAGRIDVIEW_EDIT()
End Sub

Private Sub btnCLOSE_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCLOSE.Click
Me.Close()
End Sub

Sub DATAGRIDVIEW_CurrentCellDirtyStateChanged(ByVal sender As Object, ByVal e As EventArgs)Handles DATAGRIDVIEW.CurrentCellDirtyStateChanged

If DATAGRIDVIEW.IsCurrentCellDirty Then
DATAGRIDVIEW.CommitEdit(DataGridViewDataErrorContexts.Commit)
End If
End Sub

Public Sub DATAGRIDVIEW_EDIT()
Dim columnZ As New DataGridViewDisableButtonColumn()
columnZ.Name = "BTN"
DATAGRIDVIEW.Columns.Add(columnZ)
DATAGRIDVIEW.Columns("BTN").HeaderText = "表示"
For ROW As Integer = 0 To DATAGRIDVIEW.RowCount - 1
Dim BTNCELL As DataGridViewDisableButtonCell = _
CType(DATAGRIDVIEW.Rows(ROW).Cells("BTN"), _
DataGridViewDisableButtonCell)
Dim FLAGCELL As DataGridViewTextBoxCell = _
CType(DATAGRIDVIEW.Rows(ROW).Cells("FLAG"), _
DataGridViewTextBoxCell)
DATAGRIDVIEW.Rows(ROW).Cells("BTNCELL").Value = "表示"
If FLAGCELL.Value > 0 Then
DATAGRIDVIEW.EnableHeadersVisualStyles = False
DATAGRIDVIEW.Columns("BTN").HeaderCell.Style.BackColor = Color.RED
BTNCELL.Enabled = Not CType(0, [Boolean])
Else
BTNCELL.Enabled = Not CType(-1, [Boolean])
End If
Next
DATAGRIDVIEW.Invalidate()
End SUB
END CLASS

補足日時:2010/07/01 21:57
    • good
    • 0
この回答へのお礼

redfox63さん
ありがとうございました。
色々とデバックしてみたところ、FORM2の開き方
モーダル、モードレスで違いがあることがわかりました。

このたびはお世話になりました。

お礼日時:2010/07/03 12:03

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