自定义ComboBox控件首次Tab按键无响应问题求助
自定义ComboBox控件Tab键切换异常问题求助
我基于ComboBox控件实现了一个带提示文本功能的自定义控件,仅新增了提示文本显示及提示文本颜色调整功能。控件整体运行正常,但存在一个问题:当窗体上存在多个控件时,进入该自定义ComboBox后,首次按下Tab键无法切换到下一个控件,必须按两次Tab键才会生效,首次Tab按键像是被“吞噬”了。
我已在多个技术平台搜索许久,未找到针对该问题的解决方案,仅找到通过重写OnPreviewKeyDown事件捕获Tab按键的相关建议,但我无需修改Tab键的默认行为,仅需让其首次按下即可生效。
以下是自定义控件的代码:
public partial class PromptComboBox : ComboBox { string prompt; Color promptColor; Color savedColor; [Description("Prompt displayed to user"), Category("Appearance"), DisplayName("Prompt Text")] public string Prompt { get { return prompt; } set { prompt = value; Text = prompt; } } [Description("Color for Prompt Text"), Category("Appearance"), DisplayName("Prompt Color")] public Color PromptColor { get { return promptColor; } set { promptColor = value; ForeColor = promptColor; } } public PromptComboBox() { savedColor = ForeColor; ForeColor = promptColor; InitializeComponent(); } protected override void OnSelectedIndexChanged(EventArgs e) { if (SelectedIndex == 0) { ForeColor = promptColor; Text = prompt; } else { ForeColor = savedColor; } base.OnSelectedIndexChanged(e); } protected override void OnKeyPress(KeyPressEventArgs e) { if(char.IsLetterOrDigit(e.KeyChar) || char.IsPunctuation(e.KeyChar)) { if (Text == prompt) Text = ""; } base.OnKeyPress(e); } protected override void onke protected override void OnKeyUp(KeyEventArgs e) { if (Text.Length == 0 || (Text == prompt && (e.KeyCode == Keys.Back))) { ForeColor = promptColor; Text = prompt; } else { ForeColor = savedColor; } base.OnKeyUp(e); } protected override void OnEnter(EventArgs e) { //base.OnEnter(e); if (Text == prompt) { Select(0, 0); } } protected override void OnLeave(EventArgs e) { if (Text.Length == 0 || Text == prompt) { ForeColor = promptColor; Text = prompt; Select(0, 0); } base.OnLeave(e); } protected override void OnClick(EventArgs e) { if (Text == prompt) { Select(0, 0); } base.OnClick(e); } }
恳请各位提供帮助或建议!
内容的提问来源于stack exchange,提问作者TheoDoc2013
相关产品推荐
相关产品推荐

