Запрет передачи фокуса в DataGridView

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

bonbay
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 19.02.2009 (Чт) 17:58

Запрет передачи фокуса в DataGridView

Сообщение bonbay » 20.02.2009 (Пт) 14:25

Уважаемые форумчане!
Подскажите пожалуйста как запретить передачу фокуса на ячейки определенного столбца в DataGridView?

Dry
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 08.02.2007 (Чт) 2:03

Re: Запрет передачи фокуса в DataGridView

Сообщение Dry » 21.02.2009 (Сб) 1:53

Если MultiSelect = False

(просто создай новый проект и кинь код в форму)
Код: Выделить всё
Public Class Form1
    Dim dGrid As New MoiClass

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Me.Width = 800
        Me.Height = 600
        Me.Controls.Add(dGrid)

        dGrid.AutoSize = True
        dGrid.ReadOnly = True
        dGrid.MultiSelect = False 'надо что бы выделялась только одна ячейка
        dGrid.RowHeadersVisible = False
        dGrid.ColumnHeadersVisible = False
        dGrid.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
        dGrid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells

        dGrid.Left = 0
        dGrid.Top = 0
        dGrid.RowCount = 5
        dGrid.ColumnCount = 10
        dGrid.Item(1, 0).Selected = True 'что бы сразу не попадать в нулевую ячейку
    End Sub
End Class

Public Class MoiClass
    Inherits System.Windows.Forms.DataGridView
    Dim column As Short, row As Short 'для индексов предыдущей ячейки
    Dim n As Short 'номер колонки которую нельзя выделить (с нуля)

    Public Sub New()
        Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
        Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
        Me.SetStyle(ControlStyles.UserPaint, True)
    End Sub

    Private Sub MoiClass_CellLeave(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Me.CellLeave
        If e.ColumnIndex <> n Then
            column = e.ColumnIndex
            row = e.RowIndex
        End If
    End Sub

    Private Sub MoiClass_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.SelectionChanged
        If Me.CurrentCell.ColumnIndex = n And column <> n Then
            Me.SetCurrentCellAddressCore(column, row, False, False, False)
            Me.Item(column, row).Selected = True
        End If
    End Sub
End Class

Хотя хз может можно и проще :)


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Mail.ru [бот] и гости: 94

    TopList