Imports DevExpress.XtraGrid.Views.Tile Imports DigitalData.Modules.Database Imports DigitalData.Modules.Logging Public Class ChatControl Private ReadOnly IdColumn As String = "ID" Private ReadOnly UsernameColumn As String = "USERNAME" Private ReadOnly MessageColumn As String = "MESSAGE" Private ReadOnly DateColumn As String = "DATE" Private Db As MSSQLServer Private LogConfig As LogConfig Private Logger As Logger Private ReadOnly UsernameColorsDict As New Dictionary(Of String, Color) Private ReadOnly UsernameColors As New List(Of Color) From { Color.Purple, Color.Red, Color.LightBlue, Color.DarkSeaGreen } Public IDBObjectId As Long Public ConnectionString As String Public Sub New() InitializeComponent() End Sub Public Sub Init(ConnectionString As String, IDBObjectId As Long, CurrentUser As String) End Sub Public Function InitData() As DataTable Dim oDatatable As New DataTable() Dim oColumns As New List(Of DataColumn) From { New DataColumn(IdColumn, New Integer.GetType), New DataColumn(UsernameColumn), New DataColumn(MessageColumn), New DataColumn(DateColumn, New Date.GetType) } oDatatable.Columns.AddRange(oColumns.ToArray) Dim oRow1 = oDatatable.NewRow() With oRow1 .Item(IdColumn) = 0 .Item(UsernameColumn) = "Jonathan" .Item(MessageColumn) = "Hi" .Item(DateColumn) = Now.AddMinutes(-10).ToShortTimeString End With Dim oRow2 = oDatatable.NewRow() With oRow2 .Item(IdColumn) = 0 .Item(UsernameColumn) = "Marlon" .Item(MessageColumn) = "Was geht?" .Item(DateColumn) = Now.ToShortTimeString End With oDatatable.Rows.Add(oRow1) oDatatable.Rows.Add(oRow2) oDatatable.AcceptChanges() Return oDatatable End Function Private Sub ChatControl_Load(sender As Object, e As EventArgs) Handles Me.Load Dim oDatatable = InitData() BuildUsernameColorDict(oDatatable) GridChat.DataSource = ChatSource ChatSource.DataSource = oDatatable End Sub Private Sub BuildUsernameColorDict(Datatable As DataTable) Dim oIndex = 0 Datatable.AsEnumerable(). Select(Function(Row) Row.Item(UsernameColumn)). Distinct().ToList(). ForEach(Sub(Name) UsernameColorsDict.Add(Name, UsernameColors.Item(oIndex)) oIndex += 1 End Sub) End Sub Private Sub ChatView_CustomItemTemplate(sender As Object, e As DevExpress.XtraGrid.Views.Tile.TileViewCustomItemTemplateEventArgs) Handles ChatView.CustomItemTemplate Dim oRow As DataRow = ChatView.GetDataRow(e.RowHandle) Dim oUsername As String = oRow.Item(UsernameColumn) If oUsername = "Jonathan" Then e.Template = e.Templates.Item("ChatRight") Else e.Template = e.Templates.Item("ChatLeft") End If End Sub Private Sub ChatView_ItemCustomize(sender As Object, e As TileViewItemCustomizeEventArgs) Handles ChatView.ItemCustomize Dim oRow As DataRow = ChatView.GetDataRow(e.RowHandle) Dim oUsername As String = oRow.Item(UsernameColumn) Dim oColor As Color = UsernameColorsDict.Item(oUsername) If oUsername = "Jonathan" Then e.Item.AppearanceItem.Normal.BackColor = Color.LightGray End If e.Item.Item(UsernameColumn).Appearance.Normal.ForeColor = oColor End Sub Private Sub txtMessage_KeyUp(sender As Object, e As KeyEventArgs) Handles txtMessage.KeyUp If e.Control And e.KeyCode = Keys.Enter Then End If End Sub End Class