首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义调整PowerShell Windows窗体脚本中无边界窗口的大小

自定义调整PowerShell Windows窗体脚本中无边界窗口的大小
EN

Stack Overflow用户
提问于 2016-03-23 00:36:55
回答 1查看 1.4K关注 0票数 1

我的PowerShell脚本中有一个无边框的Windows窗口:

  • 我希望用户能够调整它的大小,但是它只应该是水平增长到左边的
  • 窗口的右边框需要始终停留在原来的位置。

调整大小本身工作,但窗口在调整大小期间水平移动。而且,每当我开始调整大小时,窗口就会跳到左边或右边一次。

由于原始脚本相当大,我举了一个例子说明了这个问题:

代码语言:javascript
复制
# Custom resize example
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

$Form1 = New-Object System.Windows.Forms.Form
$Form1.size = "500,500"
$Form1.FormBorderStyle = "None"
$Form1.TopMost = $true
$Form1.StartPosition = "CenterScreen"
$Form1.add_MouseClick({
    if ($_.Button -eq "Right") {
        $form1.close()
    }
})

$resizeBar = New-Object System.Windows.Forms.Label
$resizeBar.BackColor = "150,150,150"
$resizeBar.Size = "8,500"
$resizeBar.Cursor = "SizeWE"
$Form1.controls.add($resizeBar)

$resizeBar.add_MouseDown({ $ResizeTimer.start()})
$resizeBar.add_MouseUp({ $ResizeTimer.stop()})

$comp = new-object System.ComponentModel.Container
$ResizeTimer = New-Object System.Windows.Forms.Timer($comp)
$ResizeTimer.Interval = 10

$ResizeTimer.add_Tick({
    $MousePosX =  ([System.Windows.Forms.Cursor]::Position).x
    $Form1_LeftPos = $Form1.Left

    if ($lastmx -eq 0) {
        $script:lastmx = $MousePosX
    }
    $diffX =  $MousePosX - $lastmx

    $Form1.width = ($Form1.width - $diffX)
    $Form1.Left = $Form1_LeftPos - $diffX
    $script:lastmx = $MousePosX
})

$Form1.showdialog()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-23 05:05:41

几个小问题:

  • $script:lastmx变量初始化为0。
  • 总是把它称为$script:lastmx,而不是$lastmx
  • 实际上,$Form1.Left = $Form1_LeftPos - $diffX行应该读取$Form1.Left = $Form1_LeftPos + $diffX

这件事对我来说很管用:

代码语言:javascript
复制
$script:lastmx = 0
$ResizeTimer.add_Tick({
    $MousePosX = ([System.Windows.Forms.Cursor]::Position).x
    $Form1_LeftPos = $Form1.Left
    if ($Script:lastmx -eq 0) {
        $script:lastmx = $MousePosX
    }
    $diffX = $MousePosX - $Script:lastmx
    $Form1.width = ($Form1.width - $diffX)
    $Form1.Left = $Form1_LeftPos + $diffX
    $script:lastmx = $MousePosX
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36167812

复制
相关文章

相似问题

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