【问题标题】:ComboBox Value shows the end portion after Selecting an Item组合框值显示选择项目后的结束部分
【发布时间】:2011-07-07 21:27:34
【问题描述】:

我的 C# Winform 中有一个 ComboBox。某些项目文本大于组合框的大小。每当我选择这些值时,结尾部分都是可见的。如何确保显示开头部分。

例如,

考虑项目:{"small","big text selection"}

现在,ComboBox 足够大,可以显示 8 个字符。当我选择“大文本选择”时,

我只能看到“选举”,但我想改为查看“大文本”。

【问题讨论】:

  • 您是否考虑过让组合框更大
  • 这是一种可能性,但我想知道我怎样才能实现问题中提到的内容。

标签: c# winforms combobox selecteditem


【解决方案1】:

使用DropDownStyle 等于DropDown 对您来说意义重大吗?在这种风格的组合框中有一个编辑器,因此当您从列表中选择新值时,它会显示在编辑器中,并且光标位置设置在文本末尾。所以在这种情况下,您应该将HOME 按钮代码发送到组合框编辑器,这会将光标移动到行首。你可以这样做:

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        SendKeys.Send("{HOME}");
    }

但如果DropDown 风格对您来说并不重要,只需将其更改为DropDownList,您就会得到想要的行为。

【讨论】:

  • 这实现了我想要实现的目标。
【解决方案2】:

您还可以查看动态扩展值或对大型项目使用工具提示..

我在这里解释了如何为 Listbox 执行此操作:

http://blogs.msdn.com/b/sajoshi/archive/2010/06/15/asp-net-mvc-creating-a-single-select-list-box-and-showing-tooltip-for-lengthy-items.aspx

【讨论】:

    【解决方案3】:

    SelectedIndexChanged 事件中创建一个定时器:

    Timer timer = new Timer();
    timer.Interval = 10;
    timer.Tick += new EventHandler(timer_Tick);
    timer.Start();
    

    在它的记号中:

    void timer_Tick(object sender, EventArgs e)
    {
        comboBox1.Select(0, 0);
        (sender as Timer).Stop();
        (sender as Timer).Dispose();
    }
    

    Select 调用将实现您的目标。

    【讨论】:

    • 哇,这太丑了。首先你需要一个计时器来做什么?
    • comboBox1.Select(0, 0),这段代码似乎没有起到作用。
    • @Gunner:为我工作。需要计时器,因为直接在 SelectedIndexChanged 事件中更改文本选择确实没有效果,可能是因为自动文本选择(导致您描述的“问题”)发生在该事件之后。
    猜你喜欢
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多