我有一个带有DropDown style“drop down”的组合框。当我输入文本时。文本不是我在comboBox的文本区域中看到的文本,并且SelectedIndex SelectedItem与我在特定场景中插入的文本不一致。
似乎在打开下拉列表时,而不是在关闭下拉列表时,选择项(选择索引)对应于文本。
创建一个新表单,在其上放置一个组合框和一个按钮。将事件处理程序添加到 comboBox1 事件中: - 文本已更改 - 下拉列表 - 下拉列表已关闭,并将组合框的以下属性写入输出窗口(或文本框): - 组合框1.文本 - 组合框1.选定索引 - 组合框1.选定项 - 组合框1.选定值 - 组合框1.格式启用 我也为显示 comboBox1.Text 的按钮的单击事件添加了一个事件处理程序。
创建一个非常简单的类(例如TestItems ),它有3个属性(一个代码,一个描述和一个大写描述)。我通过用TestItems类的实例直接填充combobox项,并首先将它们添加到一个列表中,然后将combobox的DataSource设置为该列表来测试它
我用稍微不同的场景插入了三次文本“项目578”。
场景1: SelectedIndex为-1,SelectedItem为null。-只需在组合框(不要打开下拉菜单)中写入“项目578”。从输出窗口记录:
文本已更改: 组合框文本 = [项目 0] - 组合框选定索引 = [0] - 组合框选定项 = [I0 项 0] - 组合框选定值 = [I0] - 组合框格式启用 = [真] 文本更改: 组合框文本 = [I] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式启用 = [真] 文本更改: 组合框文本 = [它] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式已启用 = [真]文本已更改: 组合框.文本 = [ite] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式启用 = [真] 文本更改: 组合框文本 = [项目] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式启用 = [真] 文本已更改: 组合框文本 = [项] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式已启用 = [真] 文本已更改: 组合框.文本 = [项目 5] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式已启用 = [真] 文本已更改: 组合框.文本 = [项目 57] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式已启用 = [真] 文本已更改: 组合框文本 = [项目 578] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式已启用 = [真]
场景2:选择索引=0,选择项目是“项目0”-打开下拉列表(单击组合框右侧的箭头)-输入“项目578”-关闭下拉列表日志记录:
文本已更改: 组合框文本 = [项目 0] - 组合框选定索引 = [0] - 组合框选定项 = [I0 项 0] - 组合框选定值 = [I0] - 组合框格式启用 = [True] 下拉列表打开: 组合框文本 = [项目 0] - 组合框选定索引 = [0] - 组合框选定项 = [I0 项 0] - 组合框选定值 = [I0] - 组合框格式已启用 = [真] 文本已更改: 组合框文本 = [I] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框选定值 = [] - 组合框 已启用格式 = [True] 文本已更改: 组合框.文本 = [它] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式启用 = [真] 文本已更改: 组合框文本 = [ite] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式启用 = [真] 文本已更改: 组合框文本 = [项目] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框选定值 = [] - 组合框 已启用格式 = [True] 文本已更改: 组合框.文本 = [项目] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式已启用 = [真] 文本已更改: 组合框文本 = [项目 5] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式启用 = [真] 文本已更改: 组合框文本 = [项目 57] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式已启用 = [真] 文本已更改: 组合框文本 = [项目 578] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式启用 = [真] 下拉列表已关闭: 组合框文本 = [项目 578] - 组合框选定索引 = [0] - 组合框选定项 = [I0 项 0] - 组合框选定值 = [I0] - 组合框格式启用 = [真] 文本已更改: 组合框文本 = [项目 578] - 组合框选定索引 = [0] - 组合框选定项 = [I0 项 0] - 组合框选定值 = [I0] - 组合框格式启用 = [真]
场景3:SelectedIndex为57,SelectedItem为“Item 57”-插入“Item”-打开下拉列表-在日志末尾添加“8”:
文本已更改: 组合框文本 = [项目 0] - 组合框选定索引 = [0] - 组合框选定项 = [I0 项 0] - 组合框选定值 = [I0] - 组合框格式启用 = [真] 文本更改: 组合框文本 = [I] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式启用 = [真] 文本更改: 组合框文本 = [它] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式已启用 = [真]文本已更改: 组合框.文本 = [ite] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式启用 = [真] 文本更改: 组合框文本 = [项目] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式启用 = [真] 文本已更改: 组合框文本 = [项] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式已启用 = [真] 文本已更改: 组合框.文本 = [项目 5] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式启用 = [真] 文本更改: 组合框文本 = [项目 57] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式启用 = [真] 下拉列表打开: 组合框文本 = [项目 57] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式已启用 = [真]文本已更改: 组合框文本 = [项目 578] - 组合框选定索引 = [-1] - 组合框选定项 = [] - 组合框选定值 = [] - 组合框格式启用 = [真] 下拉列表关闭: 组合框文本 = [项目 578] - 组合框选定索引 = [57] - 组合框选定项 = [I57 项 57] - 组合框选定值 = [I57] - 组合框格式启用 = [真] 文本更改: 组合框文本 = [项目 578] - 组合框选定索引 = [57] - 组合框选定项 = [I57 项 57] - 组合框选定值 = [I57] - 组合框格式已启用 = [真]
离开组合框(失去焦点)不会改变选择项。附加注释:如果您将组合框的“FormatingEn的启用”属性设置为false,则combobox 1。文本将是选择项(display成员)的文本。因此,在第二个场景中,您将在组合框的文本区域中看到“项目57”,但当您单击显示组合框的按钮时。文本将显示“项目0”。
复制此内容的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
namespace TestCombobox
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.comboBox1.FormattingEnabled = true;
comboBox1.DropDownClosed += ComboBox1_DropDownClosed;
comboBox1.DropDown += ComboBox1_DropDown;
comboBox1.TextChanged += ComboBox1_TextChanged;
comboBox1.DisplayMember = "DescriptionUpperCase";
comboBox1.ValueMember = "Code";
FillCombo();
}
private void ComboBox1_DropDown(object sender, EventArgs e)
{
ShowDebugInfoCombobox("Dropdown opened");
}
private void ComboBox1_TextChanged(object sender, EventArgs e)
{
ShowDebugInfoCombobox("TextChanged");
}
private void ShowDebugInfoCombobox(string Info)
{
Debug.WriteLine($"{Info}: ComboBox.Text = <{comboBox1.Text}> - ComboBox SelectedIndex = <{comboBox1.SelectedIndex}> - ComboBox SelectedItem = <{comboBox1.SelectedItem}> - ComboBox SelectedValue = <{comboBox1.SelectedValue}> - Combobox FormattingEnabled = <{comboBox1.FormattingEnabled}>");
}
private void ComboBox1_DropDownClosed(object sender, EventArgs e)
{
ShowDebugInfoCombobox("DropDownClosed");
}
private void FillCombo()
{
List<TestItems> aList = new List<TestItems>();
for (int cnt = 0; cnt < 100; cnt++)
{
aList.Add(new TestItems($"I{cnt.ToString()}", $"Item {cnt.ToString()}"));
//comboBox1.Items.Add(new TestItems($"I{cnt.ToString()}", $"Item {cnt.ToString()}"));
}
comboBox1.DataSource = aList;
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(this.comboBox1?.SelectedItem?.ToString() + " Text = " + this.comboBox1.Text);
}
}
public class TestItems
{
public string Code { get; set; }
public string Description { get; set; }
public string DescriptionUpperCase { get { return Description.ToUpper(); } }
public TestItems(string code, string description)
{
this.Code = code;
this.Description = description;
}
public override string ToString()
{
return this.Code + " + " + this.Description;
}
}
}
对我来说看起来像一个错误,不确定你的意见是什么。
诚挚的问候,巴特
首先,这是一大堆额外的信息,这就是为什么你还没有得到答案。第二,如果您想要将文本“输入”到comboBox中,您应该使用KeyPress事件并从中提取文本,通过enter键进行过滤。第三,如果您希望将源数据中不存在的选定项设置为null,您必须添加条件代码来实现这一点。这是一个使用通用字符串列表的非常简单的示例:
List<string> source = new List<string>();
public Form1()
{
InitializeComponent();
source.Add("Item 1");
source.Add("Item 2");
comboBox1.Items.AddRange(source.ToArray());
}
// Enter key detection as shown in https://stackoverflow.com/a/1226740/4034168
private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 13)
{
if (!source.Contains(comboBox1.Text))
{
comboBox1.SelectedIndex = -1;
comboBox1.SelectedItem = null;
}
}
}
此外,如果要阻止用户键入任何键(但仍从下拉项中进行选择),只需像这样使用 TextUpdate 事件(添加删除 KeyPress 事件,因为您不需要它):
private void comboBox1_TextUpdate(object sender, EventArgs e)
{
if (!source.Contains(comboBox1.Text)) comboBox1.SelectedItem = null;
}
问题内容: 我正在尝试使用带有剑道分离器的Reactjs。拆分器的样式属性如下 使用Reactjs,如果我正确理解了所有内容,则可以使用内联样式来实现 但是,我也使用Dustin Getz jsxutil尝试将内容拆分成更多部分并具有独立的html片段。到目前为止,我有以下html片段(splitter.html) 和splitter.js组件,该组件按如下方式引用此html 现在,当我运行此命令
我的笔记本电脑上安装了Java14和Java8,但默认情况下我想使用8,所以我尝试将我的java_HOME设置为使用-V1.8。 在~/。bash_profile我添加了一行。执行此操作后,立即返回正确的路径,返回正确的版本。然而,如果我关闭终端并再次打开它,将产生一个空行,显示JAVA 14。编辑之后。bash_profile我做的当我重新打开终端并执行行设置JAVA_HOME仍然存在。为什么我
我已经设置了一个谷歌工作表,它附带了一个脚本,运行一个函数来提取chromebook设备信息,除了我感兴趣的两个字段,“cpuStatusReports”和“diskVolumeReports”之外,效果非常好。脚本记录器确实显示了正确的信息,但我的工作表单元格值设置为例如 {cpuUtilizationPercentageInfo=[Ljava.lang.Object;@d151552,cpuT
问题内容: Django(1.5)对我来说很好用,但是当我启动Python解释器(Python 3)进行检查时,尝试导入时会遇到最奇怪的错误 当它在Python解释器之外可以正常工作时,如何对其进行不正确的配置?在我的Django设置中,设置为: …这是如何配置不正确的? 问题答案: 你不能只启动Python并检查内容,Django不知道你要处理哪个项目。你必须执行以下操作之一: 采用 使用(或你
在 Rax 中,有以下几种方式给元素设置样式: 内联样式 通过元素的 style 属性,为元素设置内联样式: 1const myStyle = { 2 fontSize: '24px', 3 color: '#FF0000' 4}; 5 6const element = <h1 style={myStyle}>Hello Rax</h1>; 需要注意的是,style 的值是一个 object,
接口说明 设置样式 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /wish3dearth/api/material/shp/v1.0.0/setStyle 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 token string header 是 当前登录用户的TOKEN sceneId string qu