龙空技术网

据说这段代码可以检验程序员的基本功,关于ComboBox

自由践行 9581

前言:

现在各位老铁们对“javacombobox”都比较讲究,同学们都需要学习一些“javacombobox”的相关文章。那么小编在网络上搜集了一些有关“javacombobox””的相关文章,希望我们能喜欢,小伙伴们快快来了解一下吧!

前几天记录了一个关于ComboBox的文章,记录一个ComboBox的设置问题,你可能没遇到过。虽然看的人不多,但是“差评率”很高,一共8条评论,4条直接说基础太差,好评率这么低,你们想让我关店吗?[捂脸]

我一个编程20多年,经手过几十个项目,自己独立开发过6-7款产品的老程序员,竟然被集体认定为基础太差,还有王法吗?哈哈,开个玩笑[憨笑]。不过我回头一想,也许是我原文描述得不够清楚,让大家以为这是个很简单的问题。所以,我这次尽量完整地把这个问题展示下,看看这世上还有没有人跟我一样基础太差的。希望大家可以按我的进度,先做题,再看答案。

我要实现的功能很简单,就是动态生成ComboBox,动态指定它的值,然后设置默认选择项。

先看这段代码:

private void Form1_Load(object sender, EventArgs e)        {            ComboBox cbxA = new ComboBox();            List<DictionaryEntry> optionsA = new List<DictionaryEntry>();            optionsA.Add(new DictionaryEntry() { Key = "MultiLine", Value = "多行" });            optionsA.Add(new DictionaryEntry() { Key = "SingleLine", Value = "单行" });            cbxA.DataSource = optionsA;            cbxA.ValueMember = "Key";            cbxA.DisplayMember = "Value";            cbxA.SelectedValue = "SingleLine";            this.Controls.Add(cbxA);        }

现在第一个问题来了:

Q1:界面初始化完成后,cbxA的默认选择是:

(A)单行 (B)多行 (C)SingleLine (D)MultiLine (E)直接报错

大家到这里先暂停,用你们所学的基础去思考,然后在评论区写下你们的答案,再继续阅读。

.........

.........

.........

.........

.........

.........

.........

.........

.........

.........

.........

.........

程序的运行结果如下:

没有报错,但是默认选择并非是我们预期的单行,而是多行。我相信应该现在会有一些人翻上去看代码了,反正我的第一反应是一脸懵逼。

那么现在第二个问题来了:

Q2:要想让cbxA的默认选择为单行,如何调整代码?

大家到这里先暂停,用你们所学的基础去思考,然后在评论区继续写下你们的答案,再继续阅读。

.........

.........

.........

.........

.........

.........

.........

.........

.........

.........

.........

.........

最终的代码是:

ComboBox cbxA = new ComboBox();            List<DictionaryEntry> optionsA = new List<DictionaryEntry>();            optionsA.Add(new DictionaryEntry() { Key = "MultiLine", Value = "多行" });            optionsA.Add(new DictionaryEntry() { Key = "SingleLine", Value = "单行" });            cbxA.DataSource = optionsA;            cbxA.ValueMember = "Key";            cbxA.DisplayMember = "Value";            this.Controls.Add(cbxA);            cbxA.SelectedValue = "SingleLine";

如果你没看出来变化,那么我告诉你,只要把this.Controls.Add(cbxA);和cbxA.SelectedValue = "SingleLine";换下位置就好了。

现在建议大家把答案都写在评论区,实在想看看大家的真实水平到底是什么?

实不相瞒,这个问题我调试了很久才找到了关键点,因为实际项目中的代码有很多层的调用关系,真正把这个comboBox加到控件中是放在其他函数中实现的。在我当时看来,就是把一个值设置给SelectedValue,但是设置以后,这个SelectedValue死活都是null,完全失效了,完全可以用诡异、灵异来形容。

事后诸葛亮我们谁都知道,每个人都可以给出合理的解释:比如基于效率的考虑,基于消息映射的考虑等等。就好像我们常说的那些专家一样。但是在问题没发生前,能提前预料到的有几个?预料不到的就被定性为基础太差吗?我不敢认为我的编程水平很牛,短板有很多,所以现在每天也都还在学习。但是就一个代码安放顺序导致的问题,就可以被集体定性为基础太差,这说明了什么呢?

还有比较搞笑的是有人教我去看下系统自动生成的designer.cs,老师,请你自己先用自动生成的代码去给我设置个SelectedValue出来然后再来教我吧。睁眼说瞎话且好为人师的实在是不能用稀缺来形容。

我表达这些,并不是因为我个人被评价为基础太差而感到不平。我是觉得这个社会缺少实事求是的精神,缺少认真负责的态度,而且数量庞大,哪怕他是一个做技术的。真心希望能看到我们伟大的祖国和人民的共同进步。

标签: #javacombobox