C# Winforms组合框设置默认选定值无效

C# Winforms组合框设置默认选定值无效,c#,winforms,combobox,selectedvalue,bunifu,C#,Winforms,Combobox,Selectedvalue,Bunifu,我正在使用Bunifu UI winforms,我正在尝试设置combobox的默认值,但我的代码不起作用,我尝试使用selectedIndex属性设置它,但什么都没有发生。有人能帮我吗? 谢谢 ReadOnlyCollection timeZones=TimeZoneInfo.GetSystemTimeZones(); TimeZoneInfo currentTimeZone=TimeZoneInfo.FindSystemTimeZoneById(TimeZone.currentTimeZon

我正在使用Bunifu UI winforms,我正在尝试设置combobox的默认值,但我的代码不起作用,我尝试使用selectedIndex属性设置它,但什么都没有发生。有人能帮我吗? 谢谢

ReadOnlyCollection timeZones=TimeZoneInfo.GetSystemTimeZones();
TimeZoneInfo currentTimeZone=TimeZoneInfo.FindSystemTimeZoneById(TimeZone.currentTimeZone.StandardName);
Dictionary dic=新字典();
添加(0,“选择时区”);
foreach(时区中的var项目)
{
整数时间=(item.BaseUtcOffset.Hours*60+item.BaseUtcOffset.Minutes)*60;
如果(!dic.ContainsKey(时间))
{
dic.Add(time,(time==0)?item.DisplayName.Substring(0,5):item.DisplayName.Substring(0,11));
}
}
TimeZoneDropdown.DataSource=dic.ToList();
TimeZoneDropdown.DisplayMember=“Value”;
TimeZoneDropdown.ValueMember=“Key”;
TimeZoneDropdown.SelectedValue=(!String.IsNullOrEmpty(Configs.GetValue(“时区”)))?将.ToInt32(Configs.GetValue(“TimeZone”):(currentTimeZone.BaseUtcOffset.Hours*60+currentTimeZone.BaseUtcOffset.Minutes)*60;

您在哪里运行此代码?在表单的构造函数中,也许?顺便说一句,在设置
DataSource
@Jimi之前设置
DisplayMember
ValueMember
,我正在表单构造函数中运行它,我正在尝试设置DisplayMember,在设置DataSource之前设置DisplayValue,但它不工作!保留序列(首先是
DisplayMember
然后是
DataSource
),并将该代码移动到
Load
事件处理程序或
OnLoad
方法覆盖。另请参见此处的注释:谢谢Jimi,我正在尝试在表单加载中处理它,并且它可以工作,但是为什么在表单构造函数中它不能工作呢?好的,我发布了链接,以准确地回答这个问题。你没读过吗?控件尚未在窗体的构造函数中创建其句柄。控制装置尚未运行。如上所述,您可以强制创建控件的句柄或订阅在所有组件都已设置时引发的事件,如
Load
显示的
事件。或者重写引发这些事件的方法(
OnLoad()
OnShown()
,或
OnHandleCreated()
,最终)
ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
        TimeZoneInfo currentTimeZone = TimeZoneInfo.FindSystemTimeZoneById(TimeZone.CurrentTimeZone.StandardName);
        Dictionary<int, string> dic = new Dictionary<int, string>();
        dic.Add(0, "Choose Timezone");
        foreach (var item in timeZones)
        {
            int time = (item.BaseUtcOffset.Hours * 60 + item.BaseUtcOffset.Minutes) * 60;
            if (!dic.ContainsKey(time))
            {
                dic.Add(time, (time == 0) ? item.DisplayName.Substring(0, 5) : item.DisplayName.Substring(0, 11));
            }
        }

        TimeZoneDropdown.DataSource = dic.ToList();
        TimeZoneDropdown.DisplayMember = "Value";
        TimeZoneDropdown.ValueMember = "Key";
        TimeZoneDropdown.SelectedValue = (!String.IsNullOrEmpty(Configs.GetValue("TimeZone"))) ? Convert.ToInt32(Configs.GetValue("TimeZone")) : (currentTimeZone.BaseUtcOffset.Hours * 60 + currentTimeZone.BaseUtcOffset.Minutes) * 60;