none
DataGridViewのTextBoxで全選択を解除するには RRS feed

  • 質問

  •  DataGridViewのTextBoxにスクロールバーをつける方法を考えていて 編集中のセルのみ スクロールバーをつけられるようになったのですが

    編集に入った瞬間(セルをクリックした瞬間) 元々入っている文字列を全選択になります 当然の事かと思うのですが 視覚的に非常に見辛いので

    入った瞬間に全選択を解除したいのですが(→キーを押下したことにすれば良いか)どうすればよいでしょうか?

    本当はリードオンリーでスクロールを表示したいのですが 編集中しかスクロールバーをつける方法が見つからなかったので やむなくそうしております

     

    2006年9月8日 12:53

回答

  • 全体のコードをよく把握してませんでした。EditingControlも独自のクラスを使用されているかと思っていました。気が回らず、失礼しました。m(_ _)m
    そういうわけで、ScrollCellクラスに、以下のコードを追加して下さい。
    
    Public Overrides ReadOnly Property EditType() As Type
       Get
          Return GetType(EditCtl)
       End Get
    End Property
    
    2006年9月9日 4:09
    モデレータ
  •  trapemiya さんからの引用
    全体のコードをよく把握してませんでした。EditingControlも独自のクラスを使用されているかと思っていました。気が回らず、失礼しました。m(_ _)m
    そういうわけで、ScrollCellクラスに、以下のコードを追加して下さい。
    
    Public Overrides ReadOnly Property EditType() As Type
       Get
          Return GetType(EditCtl)
       End Get
    End Property
    

    trapemiyaさん ありがとうございます

    感動です うまくいきました

    Public Class ScrollCell
        Inherits DataGridViewTextBoxCell

        Public Sub New()
            MyBase.New()
        End Sub

        Public Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer, _
            ByVal initialFormattedValue As Object, _
            ByVal dataGridViewCellStyle As DataGridViewCellStyle)
            Dim ctl As TextBox = _
                        CType(DataGridView.EditingControl, TextBox)
            ctl.ScrollBars = ScrollBars.Both
           
            MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle)

        End Sub
        Public Overrides ReadOnly Property EditType() As Type
            Get
                Return GetType(EditCtl)
            End Get
        End Property
    End Class

    Public Class EditCtl
        Inherits DataGridViewTextBoxEditingControl
        Public Sub New()
            MyBase.New()
        End Sub
        Public Overrides Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean)
            selectAll = False
            MyBase.PrepareEditingControlForEdit(selectAll)
        End Sub
    End Class

    これを Formの Newのところで

       Public Sub New()

            ' この呼び出しは、Windows フォーム デザイナで必要です。
            InitializeComponent()

            ' InitializeComponent() 呼び出しの後で初期化を追加します。
            Dim cel As DataGridViewCell = New ScrollCell
            Column1.CellTemplate = cel

        End Sub

    という ふうにしました。

    2006年9月9日 4:31

すべての返信

  • 試したわけではないのですが、SelectionStartとSelectionLengthを0にしてみたらどうでしょうか?
    2006年9月8日 13:33
    モデレータ
  •  trapemiya さんからの引用
    試したわけではないのですが、SelectionStartとSelectionLengthを0にしてみたらどうでしょうか?

    trapemiya さん ありがとうございます

    Public Class ScrollCell
        Inherits DataGridViewTextBoxCell

        Public Sub New()

        End Sub

        Public Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer, _
            ByVal initialFormattedValue As Object, _
            ByVal dataGridViewCellStyle As DataGridViewCellStyle)

            Dim ctl As TextBox = _
                        CType(DataGridView.EditingControl, TextBox)
            ctl.ScrollBars = ScrollBars.Both
            ctl.SelectionStart = 0
            ctl.SelectionLength = 0
            MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle)
        End Sub

    End Class

     

    こういうふうには してみてたのですが 現象は変わりませんでした

    なにか 良い方法はないでしょか?

    2006年9月8日 22:47
  • すみません。よく調べたら、以下で行けました。EditingControl内に書いてください。
    
    Public Overrides Sub PrepareEditingControlForEdit(selectAll As Boolean)
       selectAll = False
       MyBase.PrepareEditingControlForEdit(selectAll)
    End Sub
    
    2006年9月9日 1:11
    モデレータ
  •  trapemiya さんからの引用
    すみません。よく調べたら、以下で行けました。EditingControl内に書いてください。
    
    Public Overrides Sub PrepareEditingControlForEdit(selectAll As Boolean)
       selectAll = False
       MyBase.PrepareEditingControlForEdit(selectAll)
    End Sub
    

    trapemiyaさん ありがとうございます

    Public Class EditCtl
        Inherits DataGridViewTextBoxEditingControl
        Public Sub New()
            MyBase.New()
        End Sub
        Public Overrides Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean)
            selectAll = False
            MyBase.PrepareEditingControlForEdit(selectAll)
        End Sub
    End Class

    こういう事かな と思い 書いてみました

    これを

    >EditingControl内に書いてください

    と 御教授頂いたのですが

    どこへ入れれば良いのか いろいろ調べてやってみたのですが わかりませんでした

     

    上の書き方が違うんでしょうか?

    再々申し訳ありませんが 御教授願えないでしょうか?

    2006年9月9日 3:56
  • 全体のコードをよく把握してませんでした。EditingControlも独自のクラスを使用されているかと思っていました。気が回らず、失礼しました。m(_ _)m
    そういうわけで、ScrollCellクラスに、以下のコードを追加して下さい。
    
    Public Overrides ReadOnly Property EditType() As Type
       Get
          Return GetType(EditCtl)
       End Get
    End Property
    
    2006年9月9日 4:09
    モデレータ
  •  trapemiya さんからの引用
    全体のコードをよく把握してませんでした。EditingControlも独自のクラスを使用されているかと思っていました。気が回らず、失礼しました。m(_ _)m
    そういうわけで、ScrollCellクラスに、以下のコードを追加して下さい。
    
    Public Overrides ReadOnly Property EditType() As Type
       Get
          Return GetType(EditCtl)
       End Get
    End Property
    

    trapemiyaさん ありがとうございます

    感動です うまくいきました

    Public Class ScrollCell
        Inherits DataGridViewTextBoxCell

        Public Sub New()
            MyBase.New()
        End Sub

        Public Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer, _
            ByVal initialFormattedValue As Object, _
            ByVal dataGridViewCellStyle As DataGridViewCellStyle)
            Dim ctl As TextBox = _
                        CType(DataGridView.EditingControl, TextBox)
            ctl.ScrollBars = ScrollBars.Both
           
            MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle)

        End Sub
        Public Overrides ReadOnly Property EditType() As Type
            Get
                Return GetType(EditCtl)
            End Get
        End Property
    End Class

    Public Class EditCtl
        Inherits DataGridViewTextBoxEditingControl
        Public Sub New()
            MyBase.New()
        End Sub
        Public Overrides Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean)
            selectAll = False
            MyBase.PrepareEditingControlForEdit(selectAll)
        End Sub
    End Class

    これを Formの Newのところで

       Public Sub New()

            ' この呼び出しは、Windows フォーム デザイナで必要です。
            InitializeComponent()

            ' InitializeComponent() 呼び出しの後で初期化を追加します。
            Dim cel As DataGridViewCell = New ScrollCell
            Column1.CellTemplate = cel

        End Sub

    という ふうにしました。

    2006年9月9日 4:31