以下代码按预期工作 - 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)
有人知道为什么吗?我甚至不知道从哪里开始调查原因.指向正确方向开始调查或直接解释的指针同样值得赞赏.
除了:对于我而言,我最终结合两者SelectedItem
和SelectedValue
.这样我就可以根据UI更改(通过SelectedValue
绑定)获得即时模型更新,并根据程序模型更改(通过SelectedItem
绑定)进行UI更新.
我有一些组合框设置为下拉列表,用户可以在其中选择一个数字.我也有一个清除按钮,应该清除组合框中的文本,但我似乎无法得到它.我试过了:
//doesn't work
cboxHour.Text = "";
Run Code Online (Sandbox Code Playgroud)
和
//doesn't work
cboxHour.ResetText();
Run Code Online (Sandbox Code Playgroud)
这似乎应该是如此直接,但我只是没有得到它.
从预定义的enum
基于唯一值的列表中选择QT组合框中的项目的最佳方法是什么.
在过去,我已经习惯了.NET的选择方式,可以通过将所选属性设置为您想要选择的项目值来选择项目:
cboExample.SelectedValue = 2;
Run Code Online (Sandbox Code Playgroud)
如果数据是C++枚举,是否有基于项目数据的QT执行此操作?
我在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#中有一个组合框,我想用它来使用自动完成建议,但是我希望能够在用户输入时更改自动完成条目,因为可能的有效条目太多而无法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".TextUpdate
或KeyPress
事件而不是TextChanged
.AutoCompleteCustomSource
用新的替换现有的AutoCompleteStringCollection
.即使在各种组合中,这些都没有帮助. …
我正在尝试将大型集合绑定到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然后只是改变它的内容.同样的事情,一旦收集内容发生变化,打开一个弹出窗口仍然需要几秒钟:(
我正在寻找一种向JavaFX添加自动完成功能的方法ComboBox
.在搜索了很多之后,是时候在这里问了一下.
这AutoFillBox
是众所周知的,但不是我正在搜索的内容.我想要的是一个可编辑的组合框,输入列表时应该过滤掉.但是我也希望打开列表而不打字并查看整个项目.
任何的想法?
我想创建一个带有下拉列表的文本字段,该列表允许用户选择一些预定义的值.用户还应该能够键入新值或从下拉列表中选择预定义值.我知道我可以使用两个小部件但是在我的应用程序中,如果它在一个小部件中统一,那将更符合人体工程学.
是否有标准小部件或我必须使用第三方JavaScript?
浏览器的可移植性怎么样?
我想用代码中的键/值数据填充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)
但这给了我这个:
谁能告诉我如何将a的选定项目ComboBox
变为string
变量?
string selected = cmbbox.SelectedItem.ToString();
MessageBox.Show(selected);
Run Code Online (Sandbox Code Playgroud)
这让我System.Data.DataRowView
在我的MessageBox
combobox ×10
c# ×6
data-binding ×3
winforms ×3
autocomplete ×2
wpf ×2
c++ ×1
html ×1
html-select ×1
java ×1
javafx-2 ×1
javafx-8 ×1
qcombobox ×1
qt ×1
string ×1
textbox ×1
wpf-controls ×1
xaml ×1