1

将 LostFocus 事件用于可编辑组合框时遇到问题。

private void comboBox8_LostFocus(object sender, RoutedEventArgs e)
    {
        ...
            else if (8int <= 7int && 8int >= 100)
            {
                MessageBox.Show("Error description", "Error!", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            else
            ...
    }

一切正常,除了消息框显示,即使我用鼠标单击组合框文本字段进行编辑。如果我使用前一个字段中的“选项卡”,则没有消息框。但是直接鼠标点击会导致错误的消息框。我只需要在使用“选项卡”离开该组合框或在其他地方单击鼠标(丢失焦点)时才显示它。任何人都可以帮我一个建议吗?我找不到类似的情况。谢谢你。

4

3 回答 3

1

你想听的TextBox部分,ComboBox LostFocus而不是。

        private void comboBox8_Loaded(object sender, RoutedEventArgs e)
        {
            TextBox tb = (TextBox)(sender as ComboBox).Template.FindName("PART_EditableTextBox", (sender as ComboBox));
            if (tb != null)
                tb.LostFocus += new RoutedEventHandler(tb_LostFocus);
        }

        void tb_LostFocus(object sender, RoutedEventArgs e)
        {
            ...
            else if (8int <= 7int && 8int >= 100)
            {
                MessageBox.Show("Error description", "Error!", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            else
            ...
        }
于 2013-03-22T17:33:08.513 回答
1

哦,这对我有用:

private void comboBox8_LostFocus(object sender, RoutedEventArgs e)
        {
        ...
        else if (8int <= 7int && 8int >= 100)
        {
            if (!comboBox8.IsKeyboardFocusWithin)
                {
                    MessageBox.Show("Error description", "Error!", MessageBoxButton.OK, MessageBoxImage.Information);
                }
        }
        else
        ...
        }

谢谢!!!

于 2013-03-22T17:51:13.750 回答
0

可能还有另一种方法,并不是说上面的方法没有用:) 从 RoutedEventArgs 检查源和原始源。

如果事件从控件内部发生,则它是一个内部的 lostfocus 事件(组合框有多个内部控件)并且源和原始源将具有相同的类型。

这段代码对我来说很好。当组合框实际上失去焦点时,我“做某事”。

**private void TimePicker_LostFocus(object sender, System.Windows.RoutedEventArgs e)
{
    if (e.OriginalSource.GetType().Name != e.Source.GetType().Name)
    { 
        Validate();
    }
}**

希望它有帮助

/T

于 2018-11-30T07:25:24.827 回答