首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TextBox LostFocus无限循环

TextBox LostFocus无限循环
EN

Stack Overflow用户
提问于 2013-04-10 12:07:03
回答 3查看 1.6K关注 0票数 1

我在我的表单中有一个文本框供用户键入项目代码。当textbox的焦点丢失时,它将查看数据库,以检查项目代码是否存在。然而,当我试图通过单击其他文本框来失去焦点时,我会得到无限循环。

代码语言:javascript
复制
    private void txtICode_LostFocus(object sender, RoutedEventArgs e)
    {
        if (txtICode.IsFocused != true)
        {
            if (NewData)
            {
                if (txtICode.Text != null)
                {
                    if (txtICode.Text != "")
                    {
                        Item temp = new Item();
                        Item[] list = temp.Query(new object[] { Item.DataEnum.Item_Code }, new string[] { txtICode.Text });
                        if (list.Length > 0)
                        {
                            System.Windows.Forms.MessageBox.Show("This item code is already being used.", "Invalid information");
                            txtICode.Focus();
                            return;
                        }
                    }
                }
            }
        }
    }

每次方法结束后,txtICode.IsFocused都被设置为true,循环将永远继续下去。我试着删除txtICode.Focus();,但没有什么不同。我的代码有什么问题吗?

我在我的表单中使用了.Net 3.5和WPF。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-10 12:21:25

您不必在LostFocus事件中将焦点恢复到TextBox

删除这两行:

代码语言:javascript
复制
txtICode.Focus();
return;

你可以用更干净、更易读的方式来实现代码:

代码语言:javascript
复制
private void txtICode_LostFocus(object sender, RoutedEventArgs e)
{        
    if (!NewData)
        return;

    if (String.IsNullOrEmpty(txtICode.Text))
        return;

    Item temp = new Item();
    Item[] list = temp.Query(new object[] { Item.DataEnum.Item_Code }, new string[] { txtICode.Text });
    if (list.Length > 0)
    {
        System.Windows.Forms.MessageBox.Show("This item code is already being used.", "Invalid information");
    }
 }
票数 1
EN

Stack Overflow用户

发布于 2013-04-10 12:22:22

您可以使用BeginInvoke Method异步执行:

代码语言:javascript
复制
private void txtICode_LostFocus(object sender, RoutedEventArgs e)
{
    txtICode.Dispatcher.BeginInvoke(() => {
    if (txtICode.IsFocused != true)
    {
        if (NewData)
        {
            if (txtICode.Text != null)
            {
                if (txtICode.Text != "")
                {
                    Item temp = new Item();
                    Item[] list = temp.Query(new object[] { Item.DataEnum.Item_Code }, new string[] { txtICode.Text });
                    if (list.Length > 0)
                    {
                        System.Windows.Forms.MessageBox.Show("This item code is already being used.", "Invalid information");
                        txtICode.Focus();
                        return;
                    }
                }
            }
        }
    });
}
票数 0
EN

Stack Overflow用户

发布于 2013-04-10 12:25:34

代码语言:javascript
复制
           private void txtICode_LostFocus(object sender, RoutedEventArgs e)
            {
               string inputText = txtICode.Text;
               if (string.IsNullOrEmpty(inputText) || !NewData)
               {
                   return;
               }
               Item temp = new Item();
               Item[] list = temp.Query(new object[] { Item.DataEnum.Item_Code }, 
                                                       new string[] { inputText  });
               if (list != null && list.Length > 0)
               {
                  MessageBox.Show("This item code is already being used.", "Invalidinformation");
                  txtICode.Focus();
                  return;
                }
            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15916743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档