【问题标题】:set combobox text from textbox从文本框设置组合框文本
【发布时间】:2012-05-18 17:32:13
【问题描述】:

我有用户提交的内容在正式添加到数据库之前加载到我们办公室的 c# winform 中进行处理。用户可以提交一个“推荐人”作为两个文本字段——名字和姓氏。在办公室里,我想要一个组合框,将所有现有的推荐人都加载进来,然后是名字的前几个字母,将组合框推进到它需要的区域。我想做这样的事情,取名称的前两个字母并用它来初始化组合框。

if (txtrefFirstName.TextLength > 2)
{
   string firstStart = "" + txtrefFirstName.Text[0] + txtrefFirstName.Text[1];
   firstStart = firstStart.ToUpper();
   ddlReferring.SelectedText.StartsWith(firstStart);
}
else
   ddlReferring.Text = "";

有什么想法或建议可以让它发挥作用吗?

谢谢

大卫·K。

【问题讨论】:

  • 您是直接在组合框中输入名称,还是在单独的 TextBox 控件中输入名称?
  • 你必须在 ddlReferring 上做一个 foreach 循环,然后检查项目是否 StartsWith(firstStart) 然后选择它。
  • 没有出现语法错误,只是工作不正常。组合框可以自动完成,但我想提前列出以接近它的样子。

标签: c# winforms combobox


【解决方案1】:

你可以这样写……

foreach (string item in ddlReferring.Items)
{
    if (item.StartsWith(firstStart))
    {
        ddlReferring.SelectedText = item;
        break;
    }
}

【讨论】:

  • 这让我找到了正确的方向,稍作改动,发布在编辑中。
【解决方案2】:

假设 ddl 的数据源是一个字符串对象列表,您应该能够对数据源本身进行一些比较。我倾向于将 Linq 用于此类事情,但这并不是绝对必要的,只是更短。

if (txtrefFirstName.TextLength > 2)
{
   string firstStart = txtrefFirstName.Text.Substring(0,2).ToUpper();
   string Selection = ddlReferring.DataSource.Where(a=>a.StartsWith(firstStart)).FirstOrDefault();
   ddlReferring.SelectedText = Selection ?? "";
}
else
   ddlReferring.Text = "";

选择线也可以直接来自items集合

string Selection = ddlReferring.Items.OfType<string>().Where(a=>a.StartsWith(firstStart)).FirstOrDefault();

或者如果你真的不想使用 Linq...

string Selection = "";
foreach (object item in ddlReferring.Items)
    if (item.ToString().StartsWith(firstStart))
    {
        Selection = item.ToString();
        break;
    }

即使 ddl 的数据不是字符串列表,也可以使用类似的方法,只需确保正确转换项目并比较正确的值。

【讨论】:

    猜你喜欢
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多