2016-03-23 34 views
1

我有一個無國界的WinForms我的PowerShell腳本窗口自定義調整在PowerShell中的WinForms國界的窗口的腳本

  • 我希望用戶能夠調整它,但它應該只有 水平長到左邊
  • 正確邊框的窗口需要在它的原始 地方在任何時間。

調整大小本身有效,但窗口在調整大小期間水平移動。此外,每次我開始調整大小時,窗口會向左或向右跳一次

由於原來的劇本是相當大的,我做了說明問題的例子:

# 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() 

謝謝!

回答

1

幾個小問題。

初始化您$script:lastmx變量爲0

總是稱其爲$script:lastmx$lastmx

$Form1.Left = $Form1_LeftPos - $diffX實際上應$Form1.Left = $Form1_LeftPos + $diffX

這一起工作對我來說:

$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 
}) 
相關問題