- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
Visual Studio 2010,C#
我有一个带有 DropDown
的 ComboBox
,AutoComplete
设置为 SuggestAppend
和 AutoCompleteSource
来自 ListItems
。用户将数据键入其中,直到输入正确为止。在数据与列表项之一匹配之前,组合框旁边的按钮将被禁用。
如果用户点击 Tab 键,自动完成功能会接受当前建议。它还移动到启用的选项卡序列中的下一个控件。当然,因为我希望它转到禁用按钮,所以我需要在验证条目后立即启用它。
问题是我尝试过的所有事件,PreviewKeyDown
、LostFocus
、SelectedIndexChanged
都不允许我及时启用按钮以便对其进行处理并获得焦点。它总是按 Tab 键顺序转到下一个按钮,该按钮始终处于启用状态。
我正准备让按钮保持启用状态,如果按下得太快,它会给出一个错误,但我不想那样做。我也不想使用特殊模式标志来跟踪这些控件何时获得焦点。验证似乎是一件很正常的事情,但我被卡住了。
如果 SelectedIndexChanged
在用户进行匹配时起作用,这将很容易。当框被清除或找到键入的匹配项时,它不会触发。
最佳答案
您可以创建自己的 ComboBox 类来封装此行为。像这样:
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.myComboBox1.TheButton = this.button1;
this.myComboBox1.Items.AddRange( new string[] {
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
} );
button1.Enabled = false;
}
}
public class MyComboBox : ComboBox
{
public Control TheButton { get; set; }
public MyComboBox()
{
}
bool IsValidItemSelected
{
get { return null != this.SelectedItem; }
}
protected override void OnValidated( EventArgs e )
{
if ( null != TheButton )
{
TheButton.Enabled = this.IsValidItemSelected;
TheButton.Focus();
}
base.OnValidated( e );
}
protected override void OnTextChanged( EventArgs e )
{
if ( null != TheButton )
{
TheButton.Enabled = this.IsValidItemSelected;
}
base.OnTextChanged( e );
}
}
}
关于c# - 如何通过Tab键使WinForm按钮及时获得焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11895235/
我正在尝试使用 jsmart渲染Smarty客户端有 3 个模板。如果您没有使用它们的经验,请继续阅读,因为这可能只是我犯的一个简单的 JavaScript 错误。 它适用于简单的模板: 我创建模板(
对于每个 http 请求,ASP .NET 页面是否及时编译(JITting),或者在第一次请求页面时,或者在应用程序启动时编译? 我找不到任何相关资源。 最佳答案 ASP.NET automatic
我正在使用 Pandas 来管理一组具有多个属性的文件: import pandas as pd data = {'Objtype' : ['bias', 'bias', 'flat', 'fla
有没有办法找出单循环动画 GIF 需要多长时间才能完成? 最佳答案 好吧,具体情况取决于您使用什么接口(interface)来操作这些动画 GIF(我不知道原生 Java/AWT/Swing 中真正巧
我有三个相关列:时间、ID 和交互。我如何创建一个新列,其 id 值在给定时间窗口中的“交互”列中为“1”? 应该看起来像这样: time id vec_len quadrant int
我是一名优秀的程序员,十分优秀!