DataGridView создаю свой класс, и не только

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

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

EXIS
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 02.05.2006 (Вт) 17:16

DataGridView создаю свой класс, и не только

Сообщение EXIS » 11.10.2008 (Сб) 19:17

Создал простенький класс для DataGridView
кликаю на ячейку, созданую по шаблону своего класса, начинаю вводить текст а он не вводиться... А мне нужно чтобы в водился, как в обычных ячейках. :roll:

Код: Выделить всё
Public Class DataGridViewTaskStepCell
    Inherits DataGridViewTextBoxCell

    Dim brushPercent As Brush
    Dim Bitmaps(0) As Bitmap
    Dim IconValue As Integer = 0
    Dim IconType As Integer = 0
    Dim TaskColor As Color = Color.White

    Public Sub New()
    End Sub

    Public Sub SetImageReference(ByRef ImgRef As Bitmap())
        Bitmaps = ImgRef
    End Sub

    Public Sub SetIconType(ByVal _IconType As Integer)
        IconType = _IconType
    End Sub

    Public Sub SetIconValue(ByVal _IconValue As Integer)
        IconValue = _IconValue
    End Sub

    Public Sub SetTaskColor(ByVal _TaskColor As Color)
        TaskColor = _TaskColor
    End Sub

    Public Overrides ReadOnly Property EditType() As System.Type
        Get
            Return Nothing
        End Get
    End Property

    Protected Overrides Sub Paint(ByVal graphics As System.Drawing.Graphics, ByVal clipBounds As System.Drawing.Rectangle, ByVal cellBounds As System.Drawing.Rectangle, ByVal rowIndex As Integer, ByVal cellState As System.Windows.Forms.DataGridViewElementStates, ByVal value As Object, ByVal formattedValue As Object, ByVal errorText As String, ByVal cellStyle As System.Windows.Forms.DataGridViewCellStyle, ByVal advancedBorderStyle As System.Windows.Forms.DataGridViewAdvancedBorderStyle, ByVal paintParts As System.Windows.Forms.DataGridViewPaintParts)

        graphics.FillRectangle(Brushes.White, cellBounds.X, cellBounds.Y, cellBounds.Width, cellBounds.Height)
        Dim Brush As New SolidBrush(TaskColor)
        graphics.FillRectangle(Brush, cellBounds.X + 2, cellBounds.Y + 2, cellBounds.Width - 5, cellBounds.Height - 3)

        MyBase.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, DataGridViewPaintParts.ContentForeground)

        If IconType >= 0 And IconType < Bitmaps.Length - 1 Then
            Dim xp As Integer = cellBounds.X + 4
            Dim yp As Integer = cellBounds.Y + 3
            graphics.DrawImage(Bitmaps(IconType), xp, yp)
        End If

        Dim adr As Point = MyBase.DataGridView.CurrentCellAddress

        If adr.X = ColumnIndex And adr.Y = rowIndex Then
            'graphics.DrawRectangle(Pens.Black, New Rectangle(cellBounds.X, cellBounds.Y, cellBounds.Width - 1, cellBounds.Height - 1))
        End If

    End Sub
End Class
Последний раз редактировалось EXIS 18.10.2008 (Сб) 18:36, всего редактировалось 1 раз.

EXIS
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 02.05.2006 (Вт) 17:16

Re: DataGridView создаю свой класс, проблема ввода текста

Сообщение EXIS » 11.10.2008 (Сб) 21:13

Добавил обработчик нажатий клавиш, но печатаю на русском "текст" а получаю английскими заглавными буквами "NTRCN" ChrW не помогает.... Нужно как-то конвертировать коды клавиатуры через установленную раскладку :roll:
Код: Выделить всё
    Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs, ByVal rowIndex As Integer)
        MyBase.OnKeyDown(e, rowIndex)
        MyBase.DataGridView.CurrentCell.Value += Convert.ToChar(e.KeyValue)
    End Sub

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: DataGridView создаю свой класс, проблема ввода текста

Сообщение Nord777 » 11.10.2008 (Сб) 22:12

Удали эти строки.
Код: Выделить всё
  Public Overrides ReadOnly Property EditType() As System.Type
    Get
      Return Nothing
    End Get
  End Property
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

EXIS
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 02.05.2006 (Вт) 17:16

Re: DataGridView создаю свой класс, проблема ввода текста

Сообщение EXIS » 11.10.2008 (Сб) 22:21

Nord777 писал(а):Удали эти строки.
Код: Выделить всё
  Public Overrides ReadOnly Property EditType() As System.Type
    Get
      Return Nothing
    End Get
  End Property


Спасибо теперь редактируется :D , только почему-то задний фон во время редактирования не отрисовывается.
Думаю надо все таки свой текст бокс писать :bom: , так как нужно будет отображать несколько фрагментов текста в одной ячейке.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: DataGridView создаю свой класс, проблема ввода текста

Сообщение Nord777 » 12.10.2008 (Вс) 19:34

Наследуйся от DataGridViewCell и пиши на здоровье
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

EXIS
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 02.05.2006 (Вт) 17:16

Re: DataGridView создаю свой класс, проблема ввода текста

Сообщение EXIS » 12.10.2008 (Вс) 20:01

Nord777 писал(а):Наследуйся от DataGridViewCell и пиши на здоровье


:D Отлично. Я смотрю вы хорошо разбираетесь в платформе .net
Не подскажите в VS2008 в DataGridView есть возможность, какими-нибудь методами объединять ячейки. Или можно только колдовать с Paint Event, графический симулируя объединение ячеек.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: DataGridView создаю свой класс, проблема ввода текста

Сообщение Nord777 » 12.10.2008 (Вс) 21:20

Не совсем понятно, чего ты хочешь добиться.
Опиши более подробно.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

EXIS
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 02.05.2006 (Вт) 17:16

Re: DataGridView создаю свой класс, проблема ввода текста

Сообщение EXIS » 12.10.2008 (Вс) 22:08

Nord777 писал(а):Не совсем понятно, чего ты хочешь добиться.
Опиши более подробно.


Я вот думаю. Если ячейки можно объединить, то буду делать класс ячейки на базе TextBoxCell.
Если нельзя то буду писать свой класс в котором будет как-бы симуляция нескольких ячеек :bom: .
А можно ли в класс DataGridViewCell добавить UI компанент например несколько TextBox'ов? :)
Заранее Спасибо.

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: DataGridView создаю свой класс, проблема ввода текста

Сообщение Nord777 » 13.10.2008 (Пн) 15:58

Понятней не стало.
MSDN тебе в помощь.
А начать можешь отсюда: http://www.kbyte.ru/Articles/ShowArticle.aspx?id=35&lang=en
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

EXIS
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 02.05.2006 (Вт) 17:16

Re: DataGridView создаю свой класс, проблема ввода текста

Сообщение EXIS » 13.10.2008 (Пн) 22:03

Мне нужно сделать что-то на подобие такой таблицы, вся проблемма в последнем столбце, так как, ячейка последнего столбца может содержать несколько строк в одной ячейке. Нужно либо как-то объединять ячеки, либо писать контрол котороый будет содержать в себе несколько строк. :bom:

Вот неплохая статья о том как добавить вой контрол http://www.rsdn.ru/article/dotnet/DataGridView20part2.xml сейчас изучаю
Вложения
пример.PNG
пример.PNG (10.22 Кб) Просмотров: 2530

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: DataGridView создаю свой класс, проблема ввода текста

Сообщение Nord777 » 14.10.2008 (Вт) 8:09

... ячейка последнего столбца может содержать несколько строк в одной ячейке. Нужно либо как-то объединять ячеки, либо писать контрол котороый будет содержать в себе несколько строк.
Я так понимаю ты хочешь эмулировать Excel ?
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

EXIS
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 02.05.2006 (Вт) 17:16

Re: DataGridView создаю свой класс, проблема ввода текста

Сообщение EXIS » 14.10.2008 (Вт) 21:44

Nord777 писал(а):
... ячейка последнего столбца может содержать несколько строк в одной ячейке. Нужно либо как-то объединять ячеки, либо писать контрол котороый будет содержать в себе несколько строк.
Я так понимаю ты хочешь эмулировать Excel ?


Ну если можно так "выразиться" :) Вообщем мне нужна таблица с возможностью объединения ячеек. А так же с возможностью добавления своего компанента в ячейку. Я уже кстати смотрел один самопальный контрол Source Grid называется, там есть возможность объединения ячеек, но он какой-то не стабильный. Не знаю может еще подобные есть.

EXIS
Обычный пользователь
Обычный пользователь
 
Сообщения: 71
Зарегистрирован: 02.05.2006 (Вт) 17:16

Re: DataGridView создаю свой класс, и не только

Сообщение EXIS » 18.10.2008 (Сб) 18:48

Как заставить DataGridView перерисовать содержимое ячейки если Refresh, update, inavlidate, hide->show не помогает?
Извините за оффтоп Разобрался помог метод .ClearSelection() :roll:


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList