C# ComboBox SelectedText属性和SelectedValue属性理解

在学习 ComboBox 时,遇到如下2个问题:

SelectedValue属性总为 "null"

SelectedText值总为 ""


SelectedValue

其实官方资料已经指明了问题原因,只是第一眼看过去没有理解:

获取或设置由 ValueMember 属性指定的成员属性的值。

包含由 ValueMember 属性指定的数据源成员的值的对象。

ListControl.SelectedValue 属性

之前试验时,只是简单的通过 Item 字符串值。

而实际使用时,如果通过 comboBox 的 DataSource 属性确定数据,

数据是一个对象A,A的每一项有属性(B,C,D)。那么需要选择作为 Value 的 A的某个属性,即 comboBox 的 ValueMember。 如下例子,我创建了 Test类,Test类有 id 和 name 2个属性:

如下,选择Index为1时,回读SelectedValue,则 SelectedValue=0x10

IList<Test> tList = new List<Test> {
    new Test{id=1,name="A"},
    new Test{id=16,name="B"},
    new Test{id=333,name="C"}
    };

comboBox1.DataSource = tList;
comboBox1.DisplayMember = "name";
comboBox1.ValueMember = "id";
comboBox1.SelectedIndex = 1;

学习自百度


SelectedText

还是学习官方资料

获取或设置 ComboBox 的可编辑部分中选定的文本。

其实关键在于,选定的文本,如官方文档所说,当丢失焦点时,也就丢失了选定

注解

可以使用该 SelectedText 属性检索或更改控件中 ComboBox 当前选定的文本。 但是,应注意,由于用户交互,所选内容可能会自动更改。 例如,如果在按钮Click事件处理程序中检索SelectedText值,该值将为空字符串。 这是因为当输入焦点从组合框移动到按钮时,会自动清除所选内容。

当组合框失去焦点时,选择点将移动到文本的开头,并且任何所选文本都变为未选中状态。 在这种情况下,获取 SelectedText 属性将检索一个空字符串,并设置该属性会将 SelectedText 指定的值添加到文本的开头。

当组合框获得焦点时,将自动选择控件中的全文。 如果调用控件 Focus 的方法来设置输入焦点,则无论控件是否已具有焦点,都会选择全文。

当用户从下拉列表中选择项目或使用向上键和向下键时,将自动选择新项的文本。 但是,如果尝试获取 SelectedText 某个 SelectedIndexChanged 或 SelectedValueChanged 事件处理程序中的值,该属性将返回一个空字符串。 这是因为,在这些事件发生时,已清除以前的 SelectedText 值,并且尚未设置新值。 若要检索某个或事件处理程序中的SelectedIndexChanged当前值,请改用该SelectedItem属性。SelectedValueChanged

所以,很简单的,给button设置个快捷键,然后选定部分comboBox的文本,则可以直接显示对应文本。如下,设置快捷键P,选定部分comboBox编辑框里的文本,按alt+P,则能看到效果

...
button1.Text = "button1&P";
...


public void button1_Click(object sender, EventArgs e)
{
    //comboBox1.Focus();
    MessageBox.Show(comboBox1.SelectedText);
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值