使用ComboBox时遇到的问题

遇到的问题大概如下所述:

 

1 插入了一个对话框并且根据这个对话框新建了一个对话框类CDlgSet

对话框上有

①两个ComboBox控件:一个是IDC_COMBO1,样式为下移,也就是可以输入

②另一个是IDC_COMBO2,样式为下拉列表,只能选择不能输入

③还有一个Edit编辑框控件IDC_EDIT1

④还有一个CheckBox复选框控件IDC_CHECK1

 

2 关联成员变量

①为IDC_COMBO1关联value成员变量,由于IDC_COMBO1样式为下移,所以value类型只能是 CSting类型

IDC_COMBO2关联value成员变量,IDC_COMBO2样式为下拉列表,value类型只能是int类型

②为IDC_EDIT1关联UINT型成员变量

③为IDC_CHECK1关联BOOL型成员变量

 

3 问题描述  

在CDlgSet类的WM_INITDIALOG消息处理函数中为IDC_COMBO1和IDC_COMBO2添加数据

((CComboBox*) GetDlgItem(IDC_COMBO1))->AddString(strArray[i]);  //循环体内

在一个菜单命令响应函数中构造一个CDlgSet对象并且显示,目的想取得控件的值赋给其他变量并且当再次打开该对话框的时候对话框显示的是上一次设定的值,于是发现了一个问题:下移样式的IDC_COMBO1可以显示上一次的值但是下拉列表样式的IDC_COMBO2却没有显示上一次设定的值,而其他控件都可以。

//某菜单命令响应函数

void CMyProjectView::OnSet()

{
    CDlgSet dlg;

    dlg.m1 = member;   //meber表示上一次保存的值,  m1表示IDC_COMBO2对应成员变量 其他略      行4

    UpdateData(FALSE); // 试图让控件显示的值刷新     行5

    //  codes  

    if(IDOK == dlg.DoModal())

    {

        UpdateData(TURE); //控件--->变量

        member = dlg.m1;

        UpdateData(FALSE);  //变量—-->控件

    }

}

 

结果发现当行4  行5处试图让控件刷新的时候却没有刷新出上一次的值,而其他控件都可以, IDC_COMBO1也可以,经过单步发现:代码是在DoModal()时才会去执行对话框的WM_INITDIALOG消息函数,而进入该函数之前IDC_COMBO2还没有填充值,所以行5处把member赋给IDC_COMBO2的int型成员变量试图刷新也没用,需要在该控件填充值以后刷新才可以,所以想到了在WM_INITDIALOG函数最后刷新,调用一下UpdateData(FALSE),再次运行正确。

 

NOTE: 

IDC_COMBO1之所以可以刷新出新值是因为它是可以输入的,给它关联的成员变量赋值以后在行5处的刷新是起作用的,就算那时控件里没有值也没关系。

一定要注意到这以点:对话框的初始化函数是在对话框显示出来之前调用,是在执行DoModal()函数时。


使用ComboBox时遇到的问题 - 大灰狼 - 大灰狼 的博客?

 

        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF ComboBox 是一个常用的控件,可以用于展示一组可选择的数据项,并允许用户从中选择一个或多个项。 通过扩展WPF ComboBox,我们可以对其外观和功能进行自定义。其中一种常见的扩展是添加水印文本。WPF ComboBox 默认情况下不支持显示水印,但我们可以通过自定义控件模板来实现这一功能。可以在控件模板中添加一个TextBox,设置其样式为水印文本样式,并通过绑定将ComboBox的SelectedItem与TextBox的Text属性进行关联。 另一个常见的扩展是实现自动完成功能。WPF ComboBox 默认提供了自动完成功能,但仅根据输入文本匹配项的开头。如果希望根据包含的文本进行匹配,可以通过扩展ComboBox的ItemsSource属性,并在文本变化重新筛选项集合来实现。可以自定义一个筛选器方法,将其应用于ComboBox的ItemsSource属性,并利用Text属性的变化来触发筛选。 还可以扩展WPF ComboBox以实现异步加载选项。当数据量较大或者需要远程加载选项,可能会遇到加载间过长的问题。为了解决这个问题,我们可以通过在ComboBox中添加一个Loading状态的文本,在异步加载过程中显示加载状态,直到数据加载完成后再显示选项集合。 总而言之,WPF ComboBox 可以通过自定义控件模板、实现自动完成功能、异步加载选项等方式进行扩展,提供更加灵活和丰富的功能和外观定制。这些扩展可以根据具体需求来实现,以满足不同场景下对ComboBox的定制需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值