C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.88633 の関連記事表示

<< 0 >>
■88633  DataGridViewの不正値チェック
□投稿者/ まっさん -(2018/09/12(Wed) 13:43:46)

    分類:[VB.NET/VB2005 以降] 

    環境:VB2010 Windowsフォームアプリ

    以下のような事を実現したいのですが、
    (1)DataGridViewにユーザーが不正な値を入力した場合はエラーアイコンを表示
    (2)セルの値が不正でなくなったら、エラーアイコンを消去

    DataErrorをハンドリングして以下のようなコードで実験してみましたが、
    もう一工夫したい点がいくつかあります。
    (下記コードでDataGridViewのC1列にInteger以外を入力した場合の話です。)

    (a)ESCキー押下で入力をキャンセルした場合、エラーアイコンが消えない。
    (b)不正な値を入力してEnterキー押下で不正文字を選択状態にしたい。
    (c)エラーアイコンを行ヘッダに表示しているが、できればセルに表示したい。

    (c)は無理っぽい感じがしますが、上記を実現するにはどうすればいいでしょうか?

    ’-----------------------以下、実験コード-----------------------
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Dim dt As New DataTable
    dt.Columns.Add("C1", GetType(Integer))
    dt.Rows.Add(1)
    dt.AcceptChanges()
    DataGridView1.DataSource = dt
    End Sub
    Private Sub DataGridView1_DataError(sender As Object, e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
    DataGridView1.Rows(e.RowIndex).ErrorText = "セルの値を確認してください。"
    e.Cancel = True
    End Sub
    Private Sub DataGridView1_CellValidating(sender As Object, e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
    If DataGridView1.Rows(e.RowIndex).ErrorText IsNot String.Empty Then
    DataGridView1.Rows(e.RowIndex).ErrorText = String.Empty
    End If
    End Sub
親記事 /過去ログ152より / 関連記事表示
削除チェック/

■88637  Re[1]: DataGridViewの不正値チェック
□投稿者/ まっさん -(2018/09/12(Wed) 20:21:59)
    No88633 (まっさん さん) に返信
    
    すみません。↑は間違って投稿してしまいました。
    (c)以外は以下で、一応希望通りに動作しているように思います。
    
        '編集中セルの行番号、列番号、EditingControl
        Private _textbox As Tuple(Of Integer, Integer, DataGridViewTextBoxEditingControl)
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Dim dt As New DataTable
            dt.Columns.Add("C1", GetType(Integer))
            dt.Rows.Add(1)
            dt.AcceptChanges()
            DataGridView1.DataSource = dt
        End Sub
    
        Private Sub DataGridView1_DataError(sender As Object, e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
            DataGridView1.Rows(e.RowIndex).ErrorText = "セルの値を確認してください。"
            '念の為、行番号、列番号も照合する
            If _textbox IsNot Nothing AndAlso _textbox.Item1 = e.RowIndex AndAlso _textbox.Item2 = e.ColumnIndex Then
                _textbox.Item3.SelectAll()
            End If
            e.Cancel = True
        End Sub
        Private Sub DataGridView1_CellValidating(sender As Object, e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
            If DataGridView1.Rows(e.RowIndex).ErrorText IsNot String.Empty Then
                DataGridView1.Rows(e.RowIndex).ErrorText = String.Empty
            End If
        End Sub
        Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, _
            ByVal e As DataGridViewEditingControlShowingEventArgs) _
            Handles DataGridView1.EditingControlShowing
            If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
                Dim tbox = DirectCast(e.Control, DataGridViewTextBoxEditingControl)
                Dim cell = DataGridView1.CurrentCell
                _textbox = Tuple.Create(cell.RowIndex, cell.ColumnIndex, tbox)
            Else
                _textbox = Nothing
            End If
        End Sub
        Private Sub DataGridView1_CellEndEdit(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
            DataGridView1.CurrentCell = Nothing
            DataGridView1.CurrentCell = DataGridView1(e.ColumnIndex, e.RowIndex)
        End Sub
記事No.88633 のレス /過去ログ152より / 関連記事表示
削除チェック/

■88643  Re[2]: DataGridViewの不正値チェック
□投稿者/ まっさん -(2018/09/12(Wed) 21:24:57)
    No88637 (まっさん さん) に返信
    
    編集中のTextBoxにアイコンを表示するのは力技になりそうなので以下のように
    ToolTipでエラー表示するようにしました。
    独り相撲で申し訳ありませんでした。
    
      '編集中セルの行番号、列番号、EditingControl
        Private _textbox As Tuple(Of Integer, Integer, DataGridViewTextBoxEditingControl)
        Private _toolTip As New ToolTip
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Dim dt As New DataTable
            dt.Columns.Add("C1", GetType(Integer))
            dt.Rows.Add(1)
            dt.AcceptChanges()
            DataGridView1.DataSource = dt
        End Sub
        Private Sub DataGridView1_DataError(sender As Object, e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
            '念の為、行番号、列番号も照合する
            If _textbox IsNot Nothing AndAlso _textbox.Item1 = e.RowIndex AndAlso _textbox.Item2 = e.ColumnIndex Then
                _textbox.Item3.SelectAll()
                'ツールチップを表示
                _toolTip.SetToolTip(_textbox.Item3, "セルの値を確認してください。")
                _toolTip.ToolTipIcon = ToolTipIcon.Error
                _toolTip.Active = True
            End If
            e.Cancel = True
        End Sub
        Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, _
            ByVal e As DataGridViewEditingControlShowingEventArgs) _
            Handles DataGridView1.EditingControlShowing
            If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
                Dim tbox = DirectCast(e.Control, DataGridViewTextBoxEditingControl)
                Dim cell = DataGridView1.CurrentCell
                _textbox = Tuple.Create(cell.RowIndex, cell.ColumnIndex, tbox)
            Else
                _textbox = Nothing
            End If
        End Sub
        Private Sub DataGridView1_CellEndEdit(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
            _toolTip.Active = False
        End Sub
記事No.88633 のレス / END /過去ログ152より / 関連記事表示
削除チェック/

■88636  Re[1]: DataGridViewの不正値チェック
□投稿者/ まっさn -(2018/09/12(Wed) 20:17:59)
    No88633 (まっさん さん) に返信
    > 環境:VB2010 Windowsフォームアプリ
    >
    > 以下のような事を実現したいのですが、
    > (1)DataGridViewにユーザーが不正な値を入力した場合はエラーアイコンを表示
    > (2)セルの値が不正でなくなったら、エラーアイコンを消去
    >
    > DataErrorをハンドリングして以下のようなコードで実験してみましたが、
    > もう一工夫したい点がいくつかあります。
    > (下記コードでDataGridViewのC1列にInteger以外を入力した場合の話です。)
    >
    > (a)ESCキー押下で入力をキャンセルした場合、エラーアイコンが消えない。
    > (b)不正な値を入力してEnterキー押下で不正文字を選択状態にしたい。
    > (c)エラーアイコンを行ヘッダに表示しているが、できればセルに表示したい。
    >
    > (c)は無理っぽい感じがしますが、上記を実現するにはどうすればいいでしょうか?
    >
    > ’-----------------------以下、実験コード-----------------------
    > Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    > Dim dt As New DataTable
    > dt.Columns.Add("C1", GetType(Integer))
    > dt.Rows.Add(1)
    > dt.AcceptChanges()
    > DataGridView1.DataSource = dt
    > End Sub
    > Private Sub DataGridView1_DataError(sender As Object, e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles DataGridView1.DataError
    > DataGridView1.Rows(e.RowIndex).ErrorText = "セルの値を確認してください。"
    > e.Cancel = True
    > End Sub
    > Private Sub DataGridView1_CellValidating(sender As Object, e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
    > If DataGridView1.Rows(e.RowIndex).ErrorText IsNot String.Empty Then
    > DataGridView1.Rows(e.RowIndex).ErrorText = String.Empty
    > End If
    > End Sub
記事No.88633 のレス /過去ログ152より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -