SystemParametersInfo在VB.net“幻灯片打开组合框”中失败

无法弄清楚如何用相同的名字回复上一篇文章。 当我注销时,它要求我登录,而当我登录时,没有“发布您的回复”选项,无论如何,也许此网站上存在功能错误。

我有一个类似的问题,虽然可以正常获取值,但无法保存值,所以如果其他人在理解如何声明和使用api函数方面存在类似问题,我希望我的解决方案有所帮助。

[FYI:我正在设计一个用户绘制的组合框,并且“ Slide Open Combo Boxs”窗口设置影响了组合框的下拉部分的显示。 我的标题部分没有文本,如果我的数据源只有几行,它根本就没有数据,而且组合的高度也只有几像素! 我的解决方法是分别在DropDown和DropDownClosed事件中将此窗口设置值关闭然后再次打开:

<DllImport("user32.dll", EntryPoint:="SystemParametersInfoA", SetLastError:=True, _
               CharSet:=CharSet.Ansi, ExactSpelling:=True, _
               CallingConvention:=CallingConvention.StdCall)> _
    Private Function SystemParametersInfoGet(ByVal uiAction As SPI_INDEX, ByVal uiParam As UInteger, _
                                          ByRef lpenabled As Boolean, ByVal fWinIni As UInteger) As Boolean
    End Function
    <DllImport("user32.dll", EntryPoint:="SystemParametersInfoA", SetLastError:=True, _
               CharSet:=CharSet.Ansi, ExactSpelling:=True, _
               CallingConvention:=CallingConvention.StdCall)> _
    Private Function SystemParametersInfoSet(ByVal uiAction As SPI_INDEX, ByVal uiParam As UInteger, _
                                          ByVal lpenabled As Boolean, ByVal fWinIni As UInteger) As Boolean
    End Function 
    Public Function SlideOpenComboBoxes(ByVal TurnOn As Boolean) As Boolean
        Dim fResult As Boolean
        Dim spValue As UInteger
        Dim originalMaskOn As Boolean 
        fResult = SystemParametersInfoGet(SPI_INDEX.SPI_GETCOMBOBOXANIMATION, 0, originalMaskOn, SPFIPersistance_INDEX.SPFI_NONE)
        Dim oWin32Ex As New Win32Exception()
        If fResult Then
            If TurnOn <> originalMaskOn Then
                fResult = SystemParametersInfoSet(SPI_INDEX.SPI_SETCOMBOBOXANIMATION, 0, TurnOn, SPFIPersistance_INDEX.SPFI_NONE)
                oWin32Ex = New Win32Exception()
            End If
        End If
        If Not fResult Then
            Throw oWin32Ex
        End If
        Return originalMaskOn
    End Function
End Module
与上面的解决方案相比,我注意到上一篇文章提供的代码片段有2个区别:
  1. 首先是调用参数的顺序。 我将要获取或设置的变量作为第三个参数传递给api的调用。 上一篇文章的Return = SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,lActiveFlag,0,0),所以如果我没有记错的话,顺序可能是不正确的。
  2. 另一个区别是我对api声明有两个引用,一个用于获取,另一个用于设置。 区别在于对第三个参数使用ByVal(用于设置)与ByRef(用于Geting)。
我的解决方案纯粹是试用,这是我在谷歌搜索并阅读足够的文章后尝试犯的错误。 我希望有一些关于API调用的注意事项的文档。

在不给您我全部代码的前提下,如果其他人有经验的所有者在此设置影响您的代码的情况下绘制问题,我想听听您的短处以及您的解决方法和问题。

From: https://bytes.com/topic/net/insights/915338-systemparametersinfo-failing-vb-net-slide-open-combo-boxes

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值