From 10f87536df4295c92ddc60ce18e5dcb3276fa72a Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Tue, 30 Apr 2019 14:36:56 +0200 Subject: [PATCH] LookupGrid: Add ReadOnly option --- Controls.LookupGrid/LookupControl2.vb | 131 ++++++++++++++------------ LookupControlGui/Form1.vb | 9 +- 2 files changed, 76 insertions(+), 64 deletions(-) diff --git a/Controls.LookupGrid/LookupControl2.vb b/Controls.LookupGrid/LookupControl2.vb index b1df6d2e..54aa393d 100644 --- a/Controls.LookupGrid/LookupControl2.vb +++ b/Controls.LookupGrid/LookupControl2.vb @@ -1,51 +1,14 @@ Imports System.ComponentModel Imports System.Drawing +Imports System.Windows.Forms +Imports DevExpress.Accessibility Imports DevExpress.XtraEditors Imports DevExpress.XtraEditors.Drawing Imports DevExpress.XtraEditors.Registrator Imports DevExpress.XtraEditors.Repository Imports DevExpress.XtraEditors.ViewInfo -Imports DevExpress.XtraEditors.Popup -Imports DevExpress.Accessibility Imports DevExpress.XtraEditors.Controls - - - -Public Class RepositoryItemLookupControl2 - Inherits RepositoryItemGridLookUpEdit - - Shared Sub New() - RegisterLookupControl2() - End Sub - - Public Const CustomEditName As String = "LookupControl2" - - Public Overrides ReadOnly Property EditorTypeName As String - Get - Return CustomEditName - End Get - End Property - - Public Shared Sub RegisterLookupControl2() - Dim img As Image = Nothing - EditorRegistrationInfo.Default.Editors.Add(New EditorClassInfo(CustomEditName, GetType(LookupControl2), GetType(RepositoryItemLookupControl2), GetType(GridLookUpEditBaseViewInfo), New ButtonEditPainter(), True, img, GetType(ButtonEditAccessible))) - End Sub - - Public Overrides Sub Assign(item As RepositoryItem) - BeginUpdate() - Try - MyBase.Assign(item) - Dim source As RepositoryItemLookupControl2 = TryCast(item, RepositoryItemLookupControl2) - If source Is Nothing Then - Return - End If - Finally - EndUpdate() - End Try - End Sub -End Class - Public Class LookupControl2 Inherits GridLookUpEdit @@ -63,17 +26,25 @@ Public Class LookupControl2 UpdateSelectedValues(value) End Set End Property + Public Overloads Property [ReadOnly] As Boolean + Get + Return _ReadOnly + End Get + Set(value As Boolean) + SetButtonVisibility(Not value) + _ReadOnly = value + End Set + End Property - Private LookupFormButton As EditorButton - Private DropdownButton As EditorButton + Private ReadOnly _LookupFormButton As EditorButton Private Const TAG_BUTTON_LOOKUP_FORM = "openLookupForm" - Private Const TEXT_NO_RECORDS = "Keine Datensätze ausgewählt" Private Const TEXT_ONE_RECORD = "Ein Datensatz ausgewählt" Private Const TEXT_N_RECORDS = "{0} Datensätze ausgewählt" Private _SelectedValues As List(Of String) + Private _ReadOnly As Boolean = False Shared Sub New() RepositoryItemLookupControl2.RegisterLookupControl2() @@ -84,18 +55,28 @@ Public Class LookupControl2 End Sub Public Sub New(MultiSelect As Boolean) - LookupFormButton = New EditorButton() With { + _LookupFormButton = New EditorButton() With { .Kind = ButtonPredefines.Ellipsis, .Tag = TAG_BUTTON_LOOKUP_FORM } - Properties.Buttons.AddRange({LookupFormButton}) + Properties.Buttons.AddRange({_LookupFormButton}) AddHandler ButtonClick, AddressOf HandleButtonClick AddHandler EditValueChanging, AddressOf HandleEditValueChanging AddHandler QueryPopUp, AddressOf HandleQueryPopup End Sub + Private Sub SetButtonVisibility(Visible As Boolean) + Dim oButton As EditorButton = Properties.Buttons. + Where(Function(b) b.Tag = TAG_BUTTON_LOOKUP_FORM). + FirstOrDefault() + + If oButton IsNot Nothing Then + oButton.Visible = Visible + End If + End Sub + ''' ''' Prevents popup from opening when multiselect is false ''' @@ -120,22 +101,21 @@ Public Class LookupControl2 Private Sub HandleButtonClick(sender As Object, e As ButtonPressedEventArgs) Select Case e.Button.Tag Case TAG_BUTTON_LOOKUP_FORM - Dim oForm As frmLookupGrid = GetLookupForm() - Dim oResult = oForm.ShowDialog() + Using oForm = GetLookupForm() + Dim oResult = oForm.ShowDialog() - If oResult = Windows.Forms.DialogResult.OK Then - Dim oValues = oForm.SelectedValues + If oResult = Windows.Forms.DialogResult.OK Then + Dim oValues = oForm.SelectedValues - UpdateSelectedValues(oValues) - SelectedValues = oValues - ElseIf oResult = Windows.Forms.DialogResult.Cancel Then - Dim oValues = New List(Of String) + UpdateSelectedValues(oValues) + SelectedValues = oValues + ElseIf oResult = Windows.Forms.DialogResult.Cancel Then + Dim oValues = New List(Of String) - UpdateSelectedValues(oValues) - SelectedValues = oValues - End If - - oForm.Dispose() + UpdateSelectedValues(oValues) + SelectedValues = oValues + End If + End Using End Select End Sub @@ -169,7 +149,7 @@ Public Class LookupControl2 .PreventDuplicates = PreventDuplicates, .DataSource = DataSource, .SelectedValues = SelectedValues, - .StartPosition = Windows.Forms.FormStartPosition.Manual, + .StartPosition = FormStartPosition.Manual, .Location = PointToScreen(New Point(Width, 0)) } @@ -189,3 +169,38 @@ Public Class LookupControl2 End Get End Property End Class + + +Public Class RepositoryItemLookupControl2 + Inherits RepositoryItemGridLookUpEdit + + Shared Sub New() + RegisterLookupControl2() + End Sub + + Public Const CustomEditName As String = "LookupControl2" + + Public Overrides ReadOnly Property EditorTypeName As String + Get + Return CustomEditName + End Get + End Property + + Public Shared Sub RegisterLookupControl2() + Dim img As Image = Nothing + EditorRegistrationInfo.Default.Editors.Add(New EditorClassInfo(CustomEditName, GetType(LookupControl2), GetType(RepositoryItemLookupControl2), GetType(GridLookUpEditBaseViewInfo), New ButtonEditPainter(), True, img, GetType(ButtonEditAccessible))) + End Sub + + Public Overrides Sub Assign(item As RepositoryItem) + BeginUpdate() + Try + MyBase.Assign(item) + Dim source As RepositoryItemLookupControl2 = TryCast(item, RepositoryItemLookupControl2) + If source Is Nothing Then + Return + End If + Finally + EndUpdate() + End Try + End Sub +End Class diff --git a/LookupControlGui/Form1.vb b/LookupControlGui/Form1.vb index fb9958f7..ed7e82bb 100644 --- a/LookupControlGui/Form1.vb +++ b/LookupControlGui/Form1.vb @@ -1,7 +1,4 @@ - - - -Public Class Form1 +Public Class Form1 Private _Datasource As New List(Of String) From {"Foo", "bar", "baz", "quux"} Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load @@ -11,6 +8,7 @@ Public Class Form1 LookupControl.DataSource = oDatatable LookupControl.SelectedValues = oSelectedValues + LookupControl.ReadOnly = True End Sub Private Function GetDatatable() As DataTable @@ -27,11 +25,10 @@ Public Class Form1 oDatatable.Rows.Add(oRow) Next - Return oDatatable End Function Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click - MsgBox(LookupControl.SelectedValues.Count) + LookupControl.ReadOnly = Not LookupControl.ReadOnly End Sub End Class