ComboBox dynamisch fülen

02/02/2010 - 07:33 von Susanne Senger | Report spam
Hallo, NG,

beim Öffnen eines Dokuments wird eine Form mit einer ComboBox geladen.
Bisher war an Stelle der Combo eine TextBox, die den zuletzt geschriebenen
Eintrag (Projektname) anzeigte. Nun ist die Anforderung, dass alle Projekte
in der Combo aufgeführt werden - die bisherigen könnte ich natürlich im Code
hinterlegen, es kommen aber stàndig neue Projekte dazu. Ich hatte mir
gedacht, dass ich die Usereintràge in einer XML-Datei ablegen könnte und
diese beim Öffnen auslese, aber irgendwie komme ich mit der Realisierung
nicht weiter.Vor allem: wie kriege ich es hin, dass das zuletzt benutze
Projekt voreingestellt ist?

Gruß aus München
Susanne
 

Lesen sie die antworten

#1 Thomas Gahler
02/02/2010 - 17:06 | Warnen spam
Hallo Susanne

Ich hatte mir gedacht, dass ich die Usereintràge in einer XML-Datei
ablegen könnte und diese beim Öffnen auslese, aber irgendwie komme ich mit
der Realisierung nicht weiter.Vor allem: wie kriege ich es hin, dass das
zuletzt benutze Projekt voreingestellt ist?


Also hier ein paar Ideen. Ich hoffe du komst damit klar, sonst melde dich
wieder. (diese Code-Sequenzen sind nicht lauffàhig, aber zum abschauen
gedacht.)


Ob du eine .ini-, eine .txt- oder eine .xml-Datei verwendest ist eigentlich
egal. Für solche Sachen wie du es benötigst verwende ich kleine
.txt-Dateien.

In den nachfolgenden Zeilen geht es darum, dass in einer UserForm in einer
ComboBox alle gültigen Grussformeln aufgeführt werden. Der Anwender wàhlt
eine aus und hat diese spàter im Dokument. Die gewàhlte Grussfromel wird in
der Registry abgelegt, so kann spàter diese wieder als Vorschlagswert
aufgeführt werden.


Meine Datei sieht so aus (inkl. Anführungszeichen)

"Freundliche Grüsse"
"Besten Dank"
"Auf wiedersehen"




Ich verwende für diese Sachen immer einen eigenen Type, ist für mich
einfacher die Daten so in ein Array einzulesen. Auch wenn der Type nur ein
Feld hat.


Private Type TGrussformel
sGruss As String
End Type




Mittels Open/Input wird die Datei eingelesen. Nebst dem Array, das ich für
andere Zwecke noch verwende, wir die UserForm direkt gefüllt. Falls die
externe Datei mit den Grussformeln nicht vorhanden ist wird
sicherheitshalber ein Standardeintrag erstellt.


'Externe Datei einlesen.
If funcExistiertDatei(cGrussformelListe) Then
Open cGrussformelListe For Input As #1
Do While Not EOF(1)
iZàhler = iZàhler + 1
ReDim Preserve aGrussformel(tgCOMBO_ERSTER To iZàhler)
Input #1, aGrussformel(iZàhler).sGruss
cboGrussformel.AddItem (aGrussformel(iZàhler).sGruss)
Loop
Close #1
Else
'Mindestauswahl falls Datei nicht vorhanden ist.
cboGrussformel.AddItem ("Freundliche Grüsse")
ReDim Preserve aGrussformel(iZàhler To tgCOMBO_ZWEITER)
aGrussformel(tgCOMBO_ZWEITER).sGruss = "Freundliche Grüsse"
End If



Nach dem einlesen wird die Position vom letzten Aufruf restauriert. Werte
aus Registry einlesen, DrowDown auf die erste Position setzen, DropDown wenn
möglich auf die alte Position setzen. "Wenn möglich" deshalb, weil die Datei
mit den Grussformeln vielleihct angepasst wurde. Mit dem 'On Error' ist
sicher gestellt, dass es klappt bzw. auf der ersten Position bleibt.


'Alte Position restaurieren.
cGrussformelListe = funcGetPrivateProfileString("", tgREGISTRY_KEY &
tDocAssistent.cSpeichernReg, "Grussformel",
cboGrussformel.List(tgCOMBO_ERSTER))
cboGrussformel.ListIndex = tgCOMBO_ERSTER
On Error Resume Next
cboGrussformel.Value = cGrussformelListe
On Error GoTo 0





Beim wechslen der Auswahl im DropDown wird der neue Wert umgehend in die
Registry geschrieben. Du kannst dies jedoch auch zu einem anderen Zeitpunkt
machen.


Private Sub cboGrussformel_Change()
'Abspeichern der Einstellung in der Registry.
vDummy = funcWritePrivateProfileString("", tgREGISTRY_KEY &
tDocAssistent.cSpeichernReg, "Grussformel", cboGrussformel.Value)
End Sub




Für den Zugriff auf die Registry kannst du diese beiden verwenden
System.PrivateProfileString
GetSetting und SaveSetting



Wie gesagt, bei Fragen helfe ich gerne weiter...




Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows XP (SP3), Office XP (SP3)

Ähnliche fragen