当组合框绑定到数据源时使用ComboBox.Text

编程入门 行业动态 更新时间:2024-10-28 03:22:29
本文介绍了当组合框绑定到数据源时使用ComboBox.Text的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我们有一个项目,该项目设置组合框的数据源,但允许用户从此列表中选择某项,或者键入列表中未包含的项。基本上,有一个包含街道的Geobase,但是不需要用户从列表中选择街道。 ComboBox.DropDownStyle设置为DropDown。

We have a project that sets the DataSource of a combobox, but allows users to either select something from this list OR type in an item not contained in the list. Basically, there is a Geobase that contains streets, but the users are not required to choose a street from the list. The ComboBox.DropDownStyle is set to DropDown.

如果用户编辑的记录包含不在地理数据库中(因此不在ComboBox.DataSource中)的街道,

If a user edits a record that contains a street NOT in the geobase (and therefore not in the ComboBox.DataSource) we are having issues populating the form correctly.

这里是我们的问题的简化形式:

Here is a greatly simplified form of our problem:

private void button1_Click(object sender, EventArgs e) { // Create a new form. In the constructor the DataSource of the ComboBox is set with three items: // Main St., First St., and Second St. ComboBoxTrialForm frm = new ComboBoxTrialForm(); // Set comboBox1.Text equal to an item NOT in the datasource frm.SetComboTextValue("Michigan Ave."); // Show the form, and the comboBox has the first item in its datasource selected frm.Show(); }

ComboBoxTrial类的内容如下:

The ComboBoxTrial Class goes something like this:

public partial class ComboBoxTrialForm : Form { public ComboBoxTrialForm() { InitializeComponent(); List<string> streets = new List<string>() { "Main St.", "First St.", "Second St." }; comboBox1.DataSource = streets; } public void SetComboTextValue(string text) { comboBox1.Text = text; } }

我设置了断点,发现comboBox1.Text确实确实设置正确。有趣的是,在此简化示例中,我发现BindingContextChanged事件实际上被触发了两次。一次在构造函数中调用 comboBox1.DataSource = street 时,第二次在构造函数中调用 frm.Show()

I set break points and found that comboBox1.Text does indeed get set correctly. Interestingly I found that the BindingContextChanged event actually gets fired twice in this simplified example. Once in the constructor when comboBox1.DataSource = streets is called, and a second time when frm.Show() is called.

为什么在显示表单时触发此事件,这就是为什么我的手动设置选择被删除的原因?我应该如何去纠正这种行为?

Why is this event firing when the form is shown, and is this why my manually set selection is getting removed? How should I go about correcting this behavior?

此外,我以为我应该能够以这种方式使用组合框是不对的吗?

Also, am I incorrect in thinking that I should be able to use the combobox in this way?

谢谢。

推荐答案

您应该可以将SelectedIndex设置为-1,这样在列表中没有选择任何项目。到达密歇根大街没有任何问题。

You should be able to set the SelectedIndex to -1 so that no item is selected in the list. I didn't have any problem getting "Michigan Ave." to display in the combo box with this method.

public Form1() { InitializeComponent(); comboBox1.DataSource = new List<string>() { "Main St.", "First St.", "Second St." }; comboBox1.SelectedIndex = -1; }

此外,您可以显示表单,然后设置文本。除非有问题,否则用户可能不会注意到。

Also, you could show the form, and then set the text. Unless that's a problem, the user probably won't notice.

frm.Show(); frm.SetComboTextValue("Michigan Ave.");

更多推荐

当组合框绑定到数据源时使用ComboBox.Text

本文发布于:2023-11-12 23:24:54,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1582797.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:组合   数据源   绑定   Text   ComboBox

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!