java BasicComboBoxUI 设置大小

记录一个ComboBox的设置问题,你可能没遇到过

ComboBox这个控件使用频率太高了,我从VC6编程开始就用它,一直用到C#到现在的Net6,要说我这么一个编程老手还能在它身上栽跟头,我都不敢相信。

但是今天竟然被它无情的戏耍了。记录下这个问题,看看你遇到过没有?

winform程序,我们一般情况下都是拖控件上去,这种使用一直是正常的。

由于功能需要,我需要动态创建一个ComboBox,然后动态加入数据,如下代码:

ComboBox cbx = new ComboBox();
List options = new List();
options.Add(new DictionaryEntry() { Key = "MultiLine", Value = "多行" });
options.Add(new DictionaryEntry() { Key = "SingleLine", Value = "单行" });
cbx.DataSource = options;
cbx.ValueMember = "Key";
cbx.DisplayMember = "Value";


这也都是正常的,然后我想让它默认选择是单行,所以使用了代码:

cbx.SelectedValue = "SingleLine";

按道理默认选择就应该是单行了,可是并没有,调试发现,执行之后cbx.SelectedValue仍然是null。赋值以后还是空值?里面的cbx.Items也为空,这是什么情况?

最初我以为是Net6有Bug,于是切换到了Framework4.5,结果仍然是一样的问题。

遇到问题,先到网上查了一下资料,看看别人有没有遇到过。也不知道是真没人遇到过,还是百度越发不中用了,总之没找到类似的问题。没办法,还是得自己啃。

然后我实验当我不用代码动态生成,直接在设计器中事先拖好控件,结果就是正确的。

按逻辑分析了一下,拖放控件与代码动态创建的最大不同,就是拖放的控件会自动指定它的父窗口,那么会不会是为了节省效率,如果你不指定父窗口,那么就意味着子控件是没有机会显示的,所以就被放弃执行了。这么逻辑貌似说得通,于是就做了下尝试:

ComboBox cbx = new ComboBox();
this.Controls.Add(cbx);
//some code

在new之后立即把它装到父控件中,再次运行,搞定:)

编程每天都能遇到各种稀奇古怪的事情,感兴趣的话也在评论区说出你的故事吧:)

原文链接:,转发请注明来源!