ComboBox-DataSource ersten Wert nach Eingabe nicht automatisch setzen

13/01/2009 - 11:45 von Frank Müller | Report spam
Hallo,

nach langem Suchen komme ich nicht weiter bei folgendem Problem:

Szenario:

Binde an die DataSource-Eigenschaft einer ComboBox eine Objektliste

Problem:

Nach manueller Eingabe des ersten Zeichens wird automatisch der erste
Wert der Liste in das Textfeld der Combox selektiert übertragen. Ich
bekomme es nicht hin, das zu unterbinden...

Beispiel:

-

Public Class TestKlasse


Public Sub New()

End Sub


Public Sub New(ByVal id As Integer, ByVal name As String)
_ID = id
_Name = name
End Sub


Private _ID As Integer

Public Property ID() As Integer
Get
Return _ID
End Get
Set(ByVal value As Integer)
_ID = value
End Set
End Property


Private _Name As String

Public Property Name() As String
Get
Return _Name
End Get
Set(ByVal value As String)
_Name = value
End Set
End Property


Public Overrides Function ToString() As String
Return _Name
End Function

End Class

-

private function CreateList as list (of testklasse)
Dim lst as new list(of testklasse)
lst.add(new testklasse(1,"Name1")
lst.add(new testklasse(2,"Name2")
lst.add(new testklasse(3,"Name3")
lst.add(new testklasse(4,"Name4")
return lst
end function

private sub BindListToComboBox(byval list as list(oftestklasse))
combobox.DataSource=list
end sub


Gebe ich jetzt in das Combox-Textfeld ein "N" manuell ein, dann wird
aus dem "N" im textfeld "Name1". Das möchte ich aber unterbinden. Er
soll nur das "N" belassen und nicht den ersten Wert automatisch
setzen...

Weis jemand Rat? Danke

Frank
 

Lesen sie die antworten

#1 Peter Götz
13/01/2009 - 13:10 | Warnen spam
Hallo Frank,

nach langem Suchen komme ich nicht weiter bei
folgendem Problem:

Szenario:

Binde an die DataSource-Eigenschaft einer
ComboBox eine Objektliste

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)

Ähnliche fragen