标签: combobox

ComboBox SelectedItem与SelectedValue

以下代码按预期工作 - MyProperty当用户在下拉列表中选择新项目时,模型会更新.

comboBox1.DataBindings.Add("SelectedValue", myModel, "MyProperty", true,
DataSourceUpdateMode.OnPropertyChanged);
Run Code Online (Sandbox Code Playgroud)

但是,以下方法的工作方式不同,并且在输入焦点移动到窗体上的另一个控件之前不会触发模型更新:

comboBox1.DataBindings.Add("SelectedItem", myModel, "MyProperty", true, 
DataSourceUpdateMode.OnPropertyChanged);
Run Code Online (Sandbox Code Playgroud)

有人知道为什么吗?我甚至不知道从哪里开始调查原因.指向正确方向开始调查或直接解释的指针同样值得赞赏.

除了:对于我而言,我最终结合两者SelectedItemSelectedValue.这样我就可以根据UI更改(通过SelectedValue绑定)获得即时模型更新,并根据程序模型更改(通过SelectedItem绑定)进行UI更新.

c# data-binding combobox winforms

51
推荐指数
2
解决办法
12万
查看次数

如何清除组合框?

我有一些组合框设置为下拉列表,用户可以在其中选择一个数字.我也有一个清除按钮,应该清除组合框中的文本,但我似乎无法得到它.我试过了:

 //doesn't work
 cboxHour.Text = "";
Run Code Online (Sandbox Code Playgroud)

//doesn't work
cboxHour.ResetText();
Run Code Online (Sandbox Code Playgroud)

这似乎应该是如此直接,但我只是没有得到它.

c# combobox winforms

51
推荐指数
7
解决办法
21万
查看次数

QComboBox - 根据项目的数据设置所选项目

从预定义的enum基于唯一值的列表中选择QT组合框中的项目的最佳方法是什么.

在过去,我已经习惯了.NET的选择方式,可以通过将所选属性设置为您想要选择的项目值来选择项目:

cboExample.SelectedValue = 2;
Run Code Online (Sandbox Code Playgroud)

如果数据是C++枚举,是否有基于项目数据的QT执行此操作?

c++ user-interface qt combobox qcombobox

49
推荐指数
3
解决办法
9万
查看次数

如何防止手动输入到C#中的ComboBox

我在C#中有一个使用a的表单ComboBox.如何防止用户ComboBox在C#中手动输入文本?

this.comboBoxType.Font = new System.Drawing.Font("Arial", 15.75F);
this.comboBoxType.FormattingEnabled = true;
this.comboBoxType.Items.AddRange(new object[] {
            "a",
            "b",
            "c"});
this.comboBoxType.Location = new System.Drawing.Point(742, 364);
this.comboBoxType.Name = "comboBoxType";
this.comboBoxType.Size = new System.Drawing.Size(89, 32);
this.comboBoxType.TabIndex = 57;   
Run Code Online (Sandbox Code Playgroud)

我希望ABC成为唯一的选择.

c# string combobox

49
推荐指数
3
解决办法
8万
查看次数

如何在C#组合框或文本框中动态更改自动完成条目?

我在C#中有一个组合框,我想用它来使用自动完成建议,但是我希望能够在用户输入时更改自动完成条目,因为可能的有效条目太多而无法AutoCompleteStringCollection在启动时填充.

例如,假设我让用户输入名称.我有一个可能的名字列表("乔","约翰")和一个姓氏列表("博客","史密斯"),但如果我有一千个,那么这将是一百万个可能的字符串 - 太多,无法输入自动完成条目.所以最初我想只有名字作为建议("乔","约翰"),然后一旦用户键入了第一个名字("乔"),我想删除现有的自动完成条目并替换他们使用一个新的集合,包括所选的名字,然后是可能的姓氏("Joe Bloggs","Joe Smith").为此,我尝试了以下代码:

void InitializeComboBox()
{
    ComboName.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
    ComboName.AutoCompleteSource = AutoCompleteSource.CustomSource;
    ComboName.AutoCompleteCustomSource = new AutoCompleteStringCollection();
    ComboName.TextChanged += new EventHandler( ComboName_TextChanged );
}

void ComboName_TextChanged( object sender, EventArgs e )
{
    string text = this.ComboName.Text;
    string[] suggestions = GetNameSuggestions( text );

    this.ComboQuery.AutoCompleteCustomSource.Clear();
    this.ComboQuery.AutoCompleteCustomSource.AddRange( suggestions );
}
Run Code Online (Sandbox Code Playgroud)

但是,这不能正常工作.似乎对Clear()的调用导致自动完成机制"关闭",直到组合框中出现下一个字符,但是当下一个字符出现时,上面的代码再次调用Clear(),所以用户从不实际上看到了自动完成功能.它还会导致组合框的全部内容被选中,因此在每个按键之间您必须取消选择现有文本,这使其无法使用.如果我删除对Clear()的调用,则自动完成有效,但似乎AddRange()调用无效,因为我添加的新建议未出现在自动完成下拉列表中.

我一直在寻找解决方案,并看到了各种建议,但我无法使其中任何一个工作 - 自动完成功能显示为禁用,或新的字符串不显示.这是我尝试的一系列事项:

  • BeginUpdate()在更改字符串之前调用,EndUpdate()之后调用.
  • 调用Remove()所有现有字符串而不是Clear().
  • 在更新字符串时清除组合框中的文本,然后将其添加回来.
  • AutoCompleteMode我更改字符串时将设置为"无",然后将其设置回"SuggestAppend".
  • 挂钩TextUpdateKeyPress事件而不是TextChanged.
  • 每次都AutoCompleteCustomSource用新的替换现有的AutoCompleteStringCollection.

即使在各种组合中,这些都没有帮助. …

c# combobox textbox autocomplete winforms

47
推荐指数
2
解决办法
5万
查看次数

WPF ComboBox通过绑定大型集合来解决性能问题

我正在尝试将大型集合绑定到ComboBox,并且在打开ComboBox的弹出窗口时遇到了性能问题.我搜索了互联网,发现使用VirtualizingStackPanel作为项目面板模板可能有所帮助,但它只能帮助部分.如果我将一个大型集合绑定到一个ComboBox,我可以非常快速地打开弹出窗口,这没关系,但如果之后我将另一个集合绑定到一个ComboBox并尝试再次打开弹出窗口,它会变得非常慢.如果您为空ComboBox打开弹出窗口,然后绑定大型集合并尝试再次打开弹出窗口,则会发生同样的情况 - 弹出窗口打开前需要几秒钟.

这是XAML:

<ComboBox Name="cbBlah">
    <ComboBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel />
        </ItemsPanelTemplate>
    </ComboBox.ItemsPanel>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)

和绑定的示例代码重现问题:

var list = new List<string>();
for (var i = 0; i < new Random().Next(9000, 10000); i++)
    list.Add(i.ToString());
cbBlah.ItemsSource = list;
Run Code Online (Sandbox Code Playgroud)

我试图使虚拟化堆栈面板看起来像这样:

<VirtualizingStackPanel VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling" />
Run Code Online (Sandbox Code Playgroud)

但它没有帮助,似乎忽略了VirtualizationMode,因此弹出窗口仅在第一次打开非常快,然后,每次绑定更改后,它都非常慢.

更新:我想过每次都没有绑定新的集合,但是绑定一次ObservableCollection然后只是改变它的内容.同样的事情,一旦收集内容发生变化,打开一个弹出窗口仍然需要几秒钟:(

data-binding wpf combobox wpf-controls

47
推荐指数
2
解决办法
2万
查看次数

JavaFX中的AutoComplete ComboBox

我正在寻找一种向JavaFX添加自动完成功能的方法ComboBox.在搜索了很多之后,是时候在这里问了一下.

AutoFillBox是众所周知的,但不是我正在搜索的内容.我想要的是一个可编辑的组合框,输入列表时应该过滤掉.但是我也希望打开列表而不打字并查看整个项目.

任何的想法?

java combobox autocomplete javafx-2 javafx-8

47
推荐指数
5
解决办法
5万
查看次数

如何在HTML中创建可编辑的下拉列表?

我想创建一个带有下拉列表的文本字段,该列表允许用户选择一些预定义的值.用户还应该能够键入新值或从下拉列表中选择预定义值.我知道我可以使用两个小部件但是在我的应用程序中,如果它在一个小部件中统一,那将更符合人体工程学.

是否有标准小部件或我必须使用第三方JavaScript?

浏览器的可移植性怎么样?

html combobox html-select

46
推荐指数
5
解决办法
16万
查看次数

如何通过ObjectDataProvider将ComboBox绑定到通用字典

我想用代码中的键/值数据填充ComboBox,我有这个:

XAML:

<Window x:Class="TestCombo234.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:TestCombo234"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <ObjectDataProvider x:Key="Choices" ObjectType="{x:Type local:CollectionData}" MethodName="GetChoices"/>
    </Window.Resources>
    <StackPanel HorizontalAlignment="Left">
        <ComboBox ItemsSource="{Binding Source={StaticResource Choices}}"/>
    </StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

代码背后:

using System.Windows;
using System.Collections.Generic;

namespace TestCombo234
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }
    }

    public static class CollectionData
    {
        public static Dictionary<int, string> GetChoices()
        {
            Dictionary<int, string> choices = new Dictionary<int, string>();
            choices.Add(1, "monthly");
            choices.Add(2, "quarterly");
            choices.Add(3, "biannually");
            choices.Add(4, "yearly");
            return choices;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但这给了我这个:

alt text …

c# data-binding wpf xaml combobox

46
推荐指数
2
解决办法
6万
查看次数

如何将组合框的选定项目转换为c#中的字符串变量

谁能告诉我如何将a的选定项目ComboBox变为string变量?

string selected = cmbbox.SelectedItem.ToString();
MessageBox.Show(selected);
Run Code Online (Sandbox Code Playgroud)

这让我System.Data.DataRowView在我的MessageBox

c# combobox

45
推荐指数
3
解决办法
17万
查看次数