Re: ComboBox-DataSource ersten Wert nach Eingabe nicht automatisch setzen

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance



Hallo Peter,

danke für den Hinweis aber auch in deinem Source-Code tritt der Effekt
auf. Und zwar gleich nach dem der ComboBox die DataSource gesetzt
wurde. Gleich nach dem Start steht dann der erste Wert "Januar"
bereits drin. Das will ich halt unterbinden...

Ziel ist, das der Benutzer die darunterliegende ComboBox-DataSource
anhand seiner Eingabe filtern kann. Tippt er einen Buchstaben wird die
Liste gefiltert und die DataSource der ComboBox auf die gefilterte
Liste gesetzt. Tippt er einen zweiten Buchstaben wird die Liste wieder
gefiltert und die DataSource wieder verändert usw....

Vielleicht hast du noch einen Tipp...Danke

On Tue, 13 Jan 2009 13:10:47 +0100, "Peter Götz"
<gssg_nospam@xxxxxxxxxxx> wrote:

Hallo Frank,

nach langem Suchen komme ich nicht weiter bei
folgendem Problem:

Szenario:

Binde an die DataSource-Eigenschaft einer
ComboBox eine Objektliste
--> ComboBox hat den DropDownStyle=DropDown

Problem:

Nach manueller Eingabe des ersten Zeichens wird
automatisch der erste Wert der Liste in das Textfeld
der Combox selektiert übertragen.

So verhält sich eine ComboBox mit der Einstellung

ComboBox.DropDownStyle = ComboBoxStyle.DropDownList

Ich bekomme es nicht hin, das zu unterbinden...

Wenn

ComboBox.DropDownStyle = ComboBoxStyle.DropDown

dann kommt es nicht zu dem von Dir beschriebenen
Verhalten.

Kleines Beispiel:

' /// Code in einem leeren Formmodul (Form1)
Public Class Form1
Private CBO As ComboBox
Private mMonList As List(Of clsMonth)

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

CBO = New ComboBox
With CBO
.Font = New Font("Arial", 12)
.SetBounds _
(10, 20, _
Me.ClientSize.Width - 20, _
.Height)

.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom

.DropDownStyle = ComboBoxStyle.DropDown
End With
Me.Controls.Add(CBO)

CreateData()

CBO.DisplayMember = "LName"
CBO.ValueMember = "ID"
CBO.DataSource = mMonList
End Sub

Private Sub CreateData()
Dim i As Integer
mMonList = New List(Of clsMonth)

For i = 1 To 12
mMonList.Add(New clsMonth(i))
Next
End Sub

Public Class clsMonth
Private mID As Integer
Private mSName As String
Private mLName As String

Public Sub New(ByVal ID As Integer)
SetValues(ID)
End Sub

Public Property ID() As Integer
Get
Return mID
End Get
Set(ByVal value As Integer)
SetValues(ID)
End Set
End Property

Public ReadOnly Property SName() As String
Get
Return (mSName)
End Get
End Property

Public ReadOnly Property LName() As String
Get
Return mLName
End Get
End Property

Private Sub SetValues(ByVal ID As Integer)
Select Case ID
Case 1 To 12
mID = ID
mSName = MonthName(ID, True)
mLName = MonthName(ID, False)

Case Else
Throw New Exception _
("ID ausserhalb des Bereichs 1 ... 12")
End Select
End Sub
End Class

End Class
' \\\ E N T E


Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

.



Relevant Pages