Public Class frmSettings Private Sub frmCategoryEdit_Load(sender As Object, e As EventArgs) Handles MyBase.Load prepare() fill() tcMain.SelectedTabPageIndex = 0 End Sub Private Sub prepare() grd.DataSource = General.Settings.Categories With grdv .PopulateColumns() .Columns(NameOf(Category.Key)).OptionsColumn.AllowEdit = False .Columns(NameOf(Category.Key)).Caption = "Kürzel" .Columns(NameOf(Category.Text)).Caption = "Bezeichnung" .Columns(NameOf(Category.Color)).Caption = "Farbe" .Columns(NameOf(Category.Exclude)).Caption = "Auf Kalender ausschließen" End With cboDefaultTimezone.DataBindings.Add(New Binding("EditValue", General.Settings, NameOf(General.Settings.DefaultTimezoneId))) End Sub Private Sub fill() For Each z As TimeZoneInfo In TimeZoneInfo.GetSystemTimeZones().OrderBy(Function(tz) tz.DisplayName) cboDefaultTimezone.Properties.Items.Add(z.DisplayName, z.Id, -1) ' Console.WriteLine(z.Id) Next End Sub Private Sub btnSave_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnSave.ItemClick GridFunctions.EndGridEdit(grdv) EndControlEdit(ActiveControl) General.Settings.Save() DialogResult = DialogResult.OK End Sub Public Shared Sub EndControlEdit(ActiveCtrl As Control) 'Dieser Sub ist nötig, da DevExpress-Controls ihre Daten erst durch verlieren des Fokus oder durch DoValidate() zurück ins DataSet schreiben. 'Hat ein DevExpress-Control noch Fokus und es wird auf einen Button geklickt, der keinen Fokus bekommt (z.B. RibbonControl-Buttons), werden die Änderungen aus diesem Feld nicht ins Dataset zurückgeschrieben und somit auch nicht beim Speichern als Änderungen erkannt While TypeOf ActiveCtrl Is IContainerControl ActiveCtrl = CType(ActiveCtrl, IContainerControl).ActiveControl End While If TypeOf ActiveCtrl Is DevExpress.XtraEditors.TextBoxMaskBox Then ActiveCtrl = ActiveCtrl.Parent If TypeOf ActiveCtrl Is DevExpress.XtraEditors.BaseEdit Then CType(ActiveCtrl, DevExpress.XtraEditors.BaseEdit).DoValidate() End Sub End Class