我正在构建一个WPF应用程序,我的UI由组合框和大约十几个其他UI控件组成.我有一个业务对象类,包含十几个属性并实现INotifyPropertyChanged.
这是我的业务对象的片段:
public class MyBusinessObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
{
PropertyChanged(this, e);
}
}
private int _idNumber;
public int IdNumber
{
get { return _idNumber; }
set
{
if (_idNumber == value)
{
return;
}
_idNumber = value;
OnPropertyChanged(new PropertyChangedEventArgs("IdNumber"));
}
}
private string _name;
public string Name
{
get { return _name; }
set
{
if (_name == value)
{
return;
}
_name = value;
OnPropertyChanged(new PropertyChangedEventArgs("Name")); …Run Code Online (Sandbox Code Playgroud) 我一直在尝试Data在我的mfc项目的DialogWindow中为我的组合框添加项目,在设计时通过Data为这个组合框的属性设置由分号分隔的字符串.
但它只是在运行时显示空组合框.我也尝试在DialogBox AddString()的情况OnInitDialog()下手动使用这个组合框的方法.但那也没有用.
尝试再次创建一个演示项目,当我添加组合框并将值a;b放在Data它的属性中时,它就会显示出来.但在我的项目中尝试了同样的事情,它仍然显示新组合框中的空列表!试图比较两个项目的代码,如头文件和初始化等.发现两者都是相同的.除了我的项目中的按钮和我的自定义c ++代码的一些事件声明之外,其余代码与新创建的演示项目的代码相同!
为什么在我的项目中这个组合框显示一个空的项目列表?:(
编辑:
刚刚注意到这些项目已经在列表中.但是下拉的高度很小,从而阻止了实际的物品出现!:(
试图增加组合框的大小,但我在属性窗口中找不到任何属性,拖动组合框的角落也不会增加高度!:(
rs = statement.executeQuery("select * from user");
while (rs.next()) {
String username = rs.getString("staffname");
options1.add(username); // ObservableList<String> options1 = FXCollections.observableArrayList();
}
cb.setItems(options1); // cb is ComboBox object
cb.setPromptText("Select Your Account");
cb.setPrefSize(280, 30);
Button bt = new Button("Sign In");
bt.setFont(Font.font("Calibri", FontWeight.NORMAL, 17));
bt.setStyle(" -fx-base: #333333;");
bt.setTextFill(Color.WHITE);
bt.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
try {
setCenter(userSignin());
} catch (ClassNotFoundException | SQLException ex) {
Logger.getLogger(FrontPage.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
Run Code Online (Sandbox Code Playgroud)
这是我从数据库中读取一些值并在ComboBox中显示它的代码.现在,我需要在按下Button时删除ComboBox中的所有值.我想一键删除所有内容.我该怎么做 ?
我需要一个组合框,用于显示客户名称,并在选择其一项时提供customerId。我意识到的组合框以正确的方式工作,但是当它失去焦点时,或者按Enter键时,出现以下错误:
Exception in thread "JavaFX Application Thread" java.lang.ClassCastException: java.lang.String cannot be cast to kinema.classi.NomeCodice
at kinema.ASediController$1.changed(ASediController.java:104)
at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:347)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
at javafx.beans.property.ReadOnlyObjectWrapper$ReadOnlyPropertyImpl.fireValueChangedEvent(ReadOnlyObjectWrapper.java:176)
at javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent(ReadOnlyObjectWrapper.java:142)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:145)
at javafx.scene.control.SelectionModel.setSelectedItem(SelectionModel.java:102)
at javafx.scene.control.ComboBox$2.changed(ComboBox.java:221)
at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:347)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:105)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:145)
at javafx.scene.control.ComboBoxBase.setValue(ComboBoxBase.java:167)
at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin.setTextFromTextFieldIntoComboBoxValue(ComboBoxListViewSkin.java:512)
at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin.access$200(ComboBoxListViewSkin.java:57)
at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin$3.handle(ComboBoxListViewSkin.java:162)
at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin$3.handle(ComboBoxListViewSkin.java:150)
at com.sun.javafx.event.CompositeEventHandler$NormalEventFilterRecord.handleCapturingEvent(CompositeEventHandler.java:282)
at com.sun.javafx.event.CompositeEventHandler.dispatchCapturingEvent(CompositeEventHandler.java:98)
at com.sun.javafx.event.EventHandlerManager.dispatchCapturingEvent(EventHandlerManager.java:223)
at com.sun.javafx.event.EventHandlerManager.dispatchCapturingEvent(EventHandlerManager.java:180)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchCapturingEvent(CompositeEventDispatcher.java:43)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:52)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) …Run Code Online (Sandbox Code Playgroud) 在可视化树中我可以找到ComboBox弹出窗口(带有ComboBoxItems的列表)?
我已经以编程方式打开了一个ComboBox,当在调试器中的WPF Tree Visualizer中观察它时,我看到以下内容:
: ComboBox
templateRoot : Grid
PART_Popup : Popup
toggleButton : ToggleButton
templateRoot : Border
splitBorder : Border
Arrow : Path
contentPresenter : ContentPresenter
: TextBlock
Run Code Online (Sandbox Code Playgroud)
我希望看到ScrollViewer带有某种物品主机(StackPanel?),也许是PART_Popup所在的地方,但什么都没有.
那它在哪里?
我更改了各种控件的突出显示颜色,并计划进行更多更改。因此,我最好创建自己的控件并重用它们,而不是为每个控件进行更改。
我创建了一个新的用户控件,并继承自System.Windows.Forms.ComboBox。问题是我找不到onDraw像我那样的方法来覆盖onClick。
那么我将如何去覆盖它呢?这是我用于每个控制onDraw事件的代码
public void comboMasterUsers_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
Graphics g = e.Graphics;
Brush brush = ((e.State & DrawItemState.Selected) == DrawItemState.Selected) ?
Brushes.LightSeaGreen : new SolidBrush(e.BackColor);
g.FillRectangle(brush, e.Bounds);
e.Graphics.DrawString(comboMasterUsers.Items[e.Index].ToString(), e.Font,
new SolidBrush(e.ForeColor), e.Bounds, StringFormat.GenericDefault);
e.DrawFocusRectangle();
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我使用下面的代码填写一个ComboBox:
cbxLines.DisplayMember = "Value";
cbxLines.ValueMember = "Key";
cbxLines.DataSource = new BindingSource(GetProductionLines(), null);
private Dictionary<int, string> GetProductionLines()
Run Code Online (Sandbox Code Playgroud)
现在我想用DisplayMemberComboBox中的每一个填充ListView 以及其他信息:
lvSelectedSetup.Items.Clear();
for (int i = 0; i <= cbxLines.Items.Count - 1; i++)
{
ListViewItem item = new ListViewItem();
item.SubItems.Add(cbxLines.Items[i].ToString()); <-- How to Get DisplayMember
item.SubItems.Add(cbxFromDate.Text);
item.SubItems.Add(cbxToDate.Text);
lvSelectedSetup.Items.Add(item);
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何从ComboBox 获取ValueMember或DisplayMember从ComboBox获取.
我正在尝试执行以下操作,但卡住了:
item.SubItems.Add(cbxLines.Items[i].GetType().GetProperty(cbxLines.ValueMember).GetValue(cbxLines,null))
Run Code Online (Sandbox Code Playgroud)
任何建议?
我有一个表单,其中包含以下类型的控件(仅):
Button
ComboBox
Label
TextBox
Run Code Online (Sandbox Code Playgroud)
我有一个"清除"按钮,调用此方法:
private void ClearControls()
{
foreach (TextBox txtbx in this.Controls)
{
if (txtbx != null)
{
txtbx.Text = string.Empty;
}
}
foreach (ComboBox cmbx in this.Controls)
{
if (cmbx != null)
{
cmbx.SelectedIndex = -1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
...但是当我调用它时,应用程序挂起,日志文件显示该方法的"无效转换".怎么会这样?它应该处理TextBoxes和ComboBoxes,并忽略其余的 - 无效的演员阵容在哪里?
另一个复杂的,我到处搜索,只能找到'如何在组合框中找到字符串'的答案
我想知道相反的情况.我有一个充满城市(字符串)的组合框,我传递了一个地址字符串.
我想搜索我的地址字符串,看它是否包含我的组合框中当前的任何一个城市.
例如.组合框包含:伦敦,巴黎,柏林
传入的地址:
我正在思考
address.Contains(combobox.Any().ToString());
Run Code Online (Sandbox Code Playgroud)
但你可能会说,这不起作用!
我正在使用jQuery UI Autocomplete在我的UI中显示组合框.我引用了以下网址http://jqueryui.com/autocomplete/#combobox 来渲染comboBoxes.对于我的下拉有ID说"myComboBox",我已经设置了组合框以在页面加载时使用以下内容进行聚焦.
$('#myComboBox').next().find('input').focus();
Run Code Online (Sandbox Code Playgroud)
这在chrome和IE 9中工作正常,但是在IE 10中,默认情况下,在任何用户选择之前打开组合框.IE版本10中是否有针对此特定错误的解决方法
combobox ×10
c# ×5
javafx ×2
winforms ×2
wpf ×2
casting ×1
controls ×1
data-binding ×1
inheritance ×1
java ×1
javafx-2 ×1
javascript ×1
jquery ×1
jquery-ui ×1
mfc ×1
ondraw ×1
runtime-type ×1
search ×1
textbox ×1
visual-c++ ×1
visual-tree ×1