我怎样才能让这个函数不生成“不在所有路径上返回值"?警告? [英] How can I make this function not generate a "doesn't return a value on all paths" warning?

查看:22
本文介绍了我怎样才能让这个函数不生成“不在所有路径上返回值"?警告?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我意识到这是一个非常具体的问题,在此场景之外并没有太大帮助,尽管我确信它适用于具有相同问题的其他问题.我有一个函数可以递归搜索窗口(及其子窗口)以查找特定窗口,它完全按预期工作,但是它会导致函数不会在所有路径上返回值"警告.这是我整个程序中唯一的警告,虽然它可能很愚蠢,但我很想知道是否有办法阻止此错误发生,但仍然允许该函数正常工作.

I realize this is a very specific question, and not very helpful outside of this scenario, although I am sure it applies to other questions with the same problem. I have a function to recursively search through windows (and their child windows) to find specific ones, it works exactly as expected, however it causes "function doesn't return a value on all paths" warning. This is the only warning in my entire program, and although it might be silly, I'm interested in knowing if there is a way to stop this error from occurring, but still allowing the function to work properly.

    Public Function FindQWidgetWindows() As Integer
    Dim hWndStart As Integer = 0
    Dim WindowText As String = "*"
    Dim Classname As String = "QWidget"
    Dim hwnd As Integer
    Dim sWindowText As String
    Dim sClassname As String
    Dim r As Integer
    Static level As Integer

    If level = 0 Then
        If hWndStart = 0 Then hWndStart = GetDesktopWindow()
    End If

    level = level + 1

    hwnd = GetWindow(hWndStart, GW_CHILD)

    Do Until hwnd = 0
        Call FindQWidgetWindows()

        'Get the window text and class name'
        sWindowText = Space$(255)
        r = GetWindowText(hwnd, sWindowText, 255)
        sWindowText = Microsoft.VisualBasic.Left(sWindowText, r)
        sClassname = Space$(255)
        r = GetClassName(hwnd, sClassname, 255)
        sClassname = Microsoft.VisualBasic.Left(sClassname, r)

        If (sWindowText Like WindowText) And (sClassname Like Classname) Then
            Dim aRECT As RECT
            Dim hwndInt As Int32 = hwnd
            GetWindowRect(hwndInt, aRECT)
            FindQWidgetWindows = hwnd

            'uncommenting the next line causes the routine to'
            'only return the first matching window.'
            'Exit Do'

        End If

        hwnd = GetWindow(hwnd, GW_HWNDNEXT)

    Loop

    level = level - 1
End Function

推荐答案

您依赖于这样一个事实,即 VB 会自动用您的函数名称声明一个返回变量.此变量可用作函数中的任何其他变量.所以它也可以得到一个默认的初始化.

You rely on the fact, that VB automatically declares a return variable with the name of your function. This variable can be used as any other variable in your function. So it also can get a default initialization.

正如已经提到的,您只能在非常嵌套的 If 语句中分配一个值.您应该简单地在 Do 循环之前和之前用

As already mentioned, you only assign a value in a very nested If statement. You should simply initialize your variable outside and before of your Do-loop with something like

FindQWidgetWindows = Nothing

这篇关于我怎样才能让这个函数不生成“不在所有路径上返回值"?警告?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆