我在对话框中有一个按字母顺序排序的组合框。这个组合包含多个字符串,但有些字符串在不同情况下是重复的。即我们有一个“开”和一个“开”,一个“关”和一个“关”。这似乎是多余的,但这是有原因的,尽管现在这并不重要。
重复项显然在列表中一个接一个出现,大写字符串在前。即:
OFF
Off
ON
On
当用户选择“On”(小写)时,正确的索引设置为 CurSel 并显示正确的字符串。但是,当我单击组合框的箭头以下拉列表时,它不会突出显示 CurSel,而是突出显示它前面的大写字符串。请参见下图。
这是在下拉列表中选择的:
这是展开下拉列表时在组合框中选择的内容。
我已经捕获了 ON_CBN_DROPDOWN 消息,并检查了 cursel 值,它符合我的预期。
我也已经将这个组合框子类化,这样我就可以以区分大小写的方式在这个列表中搜索字符串,因为我知道它没有正常实现,所以它可能是导致我的问题的原因。
但我不明白为什么在这个阶段字符串会覆盖 cursel 值? CurSel 值不应该是用于选择相关项的值吗?
如果有任何关于如何解决此问题的想法,我们将不胜感激。
编辑:
我试图通过覆盖 OnWndMsg 来捕获 CBN_DROPDOWN 消息。出现此消息时,我会在下拉菜单之前获取当前选择的项目(这是正确的项目)。然后我放下菜单,并调用 SetCurSel 到我之前检索到的内容。
BOOL CMyComboBox::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT *pResult)
{
if(message == CBN_DROPDOWN)
{
int nCurSel = GetCurSel();
if(nCurSel != CB_ERR)
{
ShowDropDown();
SetCurSel(nCurSel);
return TRUE;
}
}
return CComboBox::OnWndMsg(message, wParam, lParam, pResult);
}
这种有点有效,但是当我关闭焦点,或再次单击下拉箭头以隐藏下拉列表时,文本框中显示了错误的项目。这是一种有效的方法,还是我完全偏离了这里? 折叠下拉列表时会发送什么消息?
编辑 2: 我已经从 code project 实现了区分大小写的组合框效果很好。
最佳答案
进一步补充我的评论。我想你会发现内部机制是使用 SelectString 来设置 dropdown 样式的索引。
副作用是它可能无法从列表中为您选择正确的条目。因此,鉴于您的组合中内容的性质,请尝试以下操作:
int iIndex = m_cbData.FindStringExact(-1, "On");
m_cbData.SetCurSel(iIndex);
或者
int iIndex = m_cbData.FindStringExact(-1, "OFF");
m_cbData.SetCurSel(iIndex);
但是,请注意,FindStringExact 的文档表示搜索不区分大小写。但是SelectString (默认行为)更糟。
另一种可能会解决所有这些问题的方法是使用 SetWindowText 并以这种方式进行。这样,列表框组件中的内容就无关紧要了。例如:
m_cbData.SetWindowText("On");
m_cbData.SetWindowText("ON");
并通过映射到字符串或直接使用 GetWindowText 获取变量的值。
更新:有人已经完成了这项工作!这是一个区分大小写的 ComboBox 类:
http://www.codeproject.com/Articles/1363/Case-sensitive-ComboBox
关于c++ - CComboBox 下拉时不选择 CurSel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36502743/
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
状态:我正在构建一个应用程序,其中需要一个可供用户选择颜色的字段,该字段将包含RGB颜色代码字符串。我已经测试了一个看起来很漂亮但效果不佳的。它是“挑剔的颜色”,并托管在此存储库中:https://github.com/Astorsoft/picky-color.在这里我打开一个关于它的一些问题的问题。问题:请建议我在Rails3应用程序中使用一些颜色选择器。 最佳答案 也许页面上的列表jQueryUIDevelopment:ColorPicker为您提供开箱即用的产品。原因是jQuery现在包含在Rails3应用程序中,因此使用基
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or
我希望用户从一个模型的三个选项中选择一个。即我有一个模型视频,可以被评为正面/负面/未知目前我有三列bool值(pos/neg/unknown)。这是处理这种情况的最佳方式吗?为此,表单应该是什么样的?目前我有类似的东西但显然它允许多项选择,而我试图将它限制为只有一个..怎么办? 最佳答案 如果要使用字符串列,让我们说rating。然后在你的表单中:#...#...它只允许一个选择编辑完全相同但使用radio_button_tag: 关于ruby-on-rails-Rails单选按钮-模
我的Rails应用程序中安装了carrierwave。但是,当用户上传多页pdf时,我只希望应用程序获取文档中的第一页并将其转换为jpeg。这可能吗?用什么命令?这是我的uploader。#encoding:utf-8classImageUploader[200,300]##defscale(width,height)##dosomething#end#Createdifferentversionsofyouruploadedfiles:version:thumbdoprocess:resize_to_fill=>[150,210]process:convert=>:jpgdefful
对于用户模型,我有一个过滤器来检查用户的预订状态,该状态由整数值(0、1或2)表示。UserActiveAdmin索引页上的过滤器是通过以下代码实现的:filter:booking_status,as::select然而,这会导致下拉选项为0、1或2。当管理员用户从下拉列表中选择它们时,我更愿意自己将它们命名为“未完成”、“待定”和“已确认”之类的名称。有没有办法在不改变booking_status在模型中的表示方式的情况下做到这一点? 最佳答案 假设booking_status是模型中的枚举字段,您可以使用:过滤器:booking
我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“
有没有办法让Ruby能够做这样的事情?classPlane@moved=0@x=0defx+=(v)#thisiserror@x+=v@moved+=1enddefto_s"moved#{@moved}times,currentxis#{@x}"endendplane=Plane.newplane.x+=5plane.x+=10putsplane.to_s#moved2times,currentxis15 最佳答案 您不能在Ruby中覆盖复合赋值运算符。任务在内部处理。您应该覆盖+,而不是+=。plane.a+=b与plane.a=