1) Perché una form? non ti basta creare il controllo come controllo non visibile sulla form stessa e renderlo visibile al momento giustoposizionandolo in base alla posizione della combo?
Scuasa ma non ho capito cosa intendi con aggiungere un controllo sulla form stessa.
Allora giusto ti spiego cosa sto facendo.
Mi sto creando un controllo personalizzato che eredita la classe combobox.
Per farlo ho creato un nuovo progetto librerie classi ed ho inserito una classe ed una form.
Nella classe ho inserito il seguente codice( i commenti sono riportati di seguito)
Imports ComponentFactory.Krypton.Toolkit
Public Class Class1
Inherits DevExpress.XtraEditors.ComboBoxEdit
Dim frm As New xfrm
Dim dt As New DataTable("DT")
Dim dtv As New DataView
Dim ValMemb As String
Public Sub New()
End Sub
Public Overloads Property DataSource() As Object
Get
Return dt
End Get
Set(ByVal value As Object)
dt = value
dtv.Table = dt
End Set
End Property
'il controllo combobox che utilizzo non ha la proprietà valuemember e quindi la creao io
Public Property ValueMember() As String
Get
Return ValMemb
End Get
Set(ByVal value As String)
ValMemb = value
End Set
End Property
'La combobox che utilizzo non ha l'evento DropDown quindi gestisco un evento in sostituzione che è l'evento clickbutton
Protected Overrides Sub OnClickButton(ByVal buttonInfo As DevExpress.XtraEditors.Drawing.EditorButtonObjectInfoArgs)
MyBase.OnClickButton(buttonInfo)
Me.Text = ""
frm = New xfrm
frm.ControlBox = False
frm.FormBorderStyle = FormBorderStyle.FixedToolWindow
frm.AutoScroll = True
frm.AutoSize = True
frm.AutoSizeMode = AutoSizeMode.GrowOnly
dt = Me.DataSource
frm.kdgv.ReadOnly = True
frm.kdgv.DataSource = dtv
frm.kdgv.Dock = DockStyle.Fill
AddHandler frm.kdgv.CellClick, AddressOf Test
frm.Show()
'questo pezzo di codice dovrebbe farmi comparire la form sotto la mia combobox ma non funziona, non capisco ancora il perche
Dim x As Size
x.Width = 600
Dim mag As New Point(0, Me.Size.Height)
xfrm.Location = New Point(Me.PointToScreen(Me.Location)) + mag
frm.Show()
End Sub
'Questa mi serve per inviare il valore selezionato alla proprietà text della mia combobox
Private Sub Test(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs)
Dim dvx As New DataGridView
dvx = CType(sender, DataGridView)
Me.Text = dvx(Me.ValueMember, e.RowIndex).Value
frm.Close()
End Sub
'Questo mi serve per filtrare la datagridview mentre l'utente scrive
Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)
MyBase.OnTextChanged(e)
If Me.Text <> "" And Me.ValueMember <> "" Then
dtv.RowFilter = String.Format("{0} like '{1}%'", Me.ValueMember, Me.Text)
Else
dtv.RowFilter = Nothing
End If
End Sub
End Class
Secondo voi come va concettualmente?
Diciamo che il mio scopo finale è crearmi un controllo personalizzato da riutilizzare.
Grazie per il vostro aiuto