본문 바로가기

OS-서버/윈도우

파워쉘(Powershell) GUI 문법

반응형

   폼(Form)

 

   Form 중앙 배치 

 $CenterScreen = [System.Windows.Forms.FormStartPosition]::CenterScreen; 
 $Main_Form.StartPosition = $CenterScreen; 
- Form이 생성 될 때 화면 가운데에 생성된다.

   크기 수동 조절 기능 OFF

$Form.AutoSizeMode = "GrowAndShrink"


   최대화 버튼 비활성화 

$Form.MaximizeBox = $false


   보이기 , 숨기기 

$Form.show() , $Form.hide() 

 

   폼 닫기 기능 OFF 

$Form.Add_Closing({  $_.Cancel = $true }) 

 

   폼 닫을 때 특정 함수 호출 

$Form.Add_Closing({ my_function })

 

   폼 최상단에 고정

$Form.topmost = $true

 

   키 입력 발생 이벤트

# Ctrl + 1을 누르면 폼 닫기
$Form.Add_KeyDown({
 
   if($_.KeyCode -eq "D1" -and $_.Control) 
   { $Form.Close() }
})



   텍스트 박스

   값 불러오기 

 $TextBox1.Text


   입력길이 가져오기 

 $TextBox1.TextLength


   읽기전용  

$TextBox1.ReadOnly = "True"

 

   비활성화  

$TextBox1.Enabled = $false 


   엔터(개행) 허용  

$TextBox1.multiline = $true
대신 위 기능을 허용할 경우 Ctrl+A와 같은 단축키 기능을 쓰지 못함.
$TextBox1.ShortcutsEnabled = "True" 도 안먹힌다.

   포커스 설정

$Form.Activate(); $TextBox1.focus();

   스크롤 생성 

$TextBox1.Scrollbars = "Vertical" or "horizontal" or "both" 
※ 유의할 점
수평바 생성 시 "글 넘치면 자동 개행" 기능을 꺼놓고 해야한다.
$TextBox1.WordWrap = $false 

위 기능을 모두 포함한 RichTextBox 사용을 추천한다.

 

 

   배경 및 폰트색 변경

$TextBox1.ForeColor = "White" # 폰트
$TextBox1.BackColor = "Black" # 배경

 

 

 

 

   RichTextBox 
TextBox는 글씨만 작성할 수 있는 반면
RichTextBox는 각종색깔, 서식,  줄간격 및 이미지까지 모두 넣을 수 있다.
단 [Environment]::NewLine 가 안먹히는것 같다.

 


   키워드 찾기

$input_box.Find('A'); 


   글자 색 변경

# 찾은 키워드의 글자색 변경
$input_box.SelectionColor = [Drawing.Color]::red; 

# 바탕색 변경
$input_box.SelectionBackColor = [Drawing.Color]::blue; 


# 일괄 변경 
$find_char = 'A' 
$len = $input_box.TextLength; 
$index = 0; 
$lastIndex = $input_box.Text.LastIndexOf($find_char); 

while ( $index -lt $lastIndex ) 
{ 
$input_box.Find($find_char, $index, $len, [System.Windows.forms.RichtextBoxFinds]::None); 
$input_box.SelectionBackColor = [Drawing.Color]::red; 
$index = $input_box.Text.IndexOf($find_char, $index) + 1; 
}  
# 키워드 중 모든 'A' 의 바탕색을 빨간색으로 변경

# Find의 4번 인자는 검색에서 찾은 결과가 단어 단위로 검색되었는지 여부에 관계 없이  
# 모든 결과를 찾습니다.

 

 

 

   메시지 박스 


   메시지 띄우기 

 [System.Windows.Forms.MessageBox]::Show('hi')  
[System.Windows.MessageBox]::show("textbox") 대신 [System.Windows.Forms.MessageBox]를 사용한다.
 - 자세한 이유는 모르나 메시지 박스를 띄울 때 Forms가 없으면 exe 실행 시 어셈블러 오류가 뜬다.

 

   버튼 만들기 

$oRetrun=[System.Windows.Forms.MessageBox]::Show('content',"title",[System.Windows.Forms.MessageBoxButtons]::OKCancel) 
        if ( $oRetrun -eq "OK" ) 
        { echo 'OK ' } else { "Cancle" } 

 

   클립보드에 텍스트 복사 

$Textbox1.SelectAll() 
$Textbox1.Copy() 

 

   라디오 버튼  

   기본 체크 값 설정  

$RadioButton1.Checked = "True"


   라디오 버튼을 특정 그룹끼리 묶고 싶은 경우 
   Groupbox 컴포넌트를 사용한다.

$Groupbox1  ... 
$Radiobut1 
$Radiobut2 

$Groupbox2  ... 
$Radiobut3 
$Radiobut4 

$MainForm.controls.AddRange(@($Groupbox1,$Groupbox2)) 
$Groupbox1.controls.AddRange(@($Radiobut1,$Radiobut2)) 
$Groupbox1.controls.AddRange(@($Radiobut3,$Radiobut4)) 

 

   다이얼로그 박스  

   디렉토리 선택 

Add-Type -AssemblyName System.Windows.Forms 
$browser = New-Object System.Windows.Forms.FolderBrowserDialog 
$check = $browser.ShowDialog()

 


   단일 파일 선택 

Add-Type -AssemblyName System.Windows.Forms 
$browser = New-Object System.Windows.Forms.OpenFileDialog 
$browser.Filter = "All Files (*.txt)|*.txt” 
$check = $browser.ShowDialog() 
if ($check -ne "Cancel" ) { $browser.FileNames }


   다수 파일 선택 

$browser.Multiselect = "True"  


   확장자 지정 

$browser.Filter = "All Files (*.txt)|*.txt”


   기본 경로 선택 

$FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog -Property @{
SelectedPath = 'C:\Temp’ }

 

 

 

 

   콤보 박스  

   아이템 등록

# 아이템 목록 생성
$combobox_items = @("cpp","c-sharp","c")

# 아이템 목록 추가
foreach($computer in $combobox_items)
{ $combobox.Items.add($computer) }

# 선택된 아이템 인덱스 반환
$combobox_items.SelectedIndex


   이벤트 추가

# 아이템 선택 시 발생 - 선택한 아이템 이름 출력
$combobox.add_SelectedIndexChanged( $combobox.SelectedItem.ToString() )

 

   내용 수정 금지

$li_account_list.DropDownStyle   = 'DropDownList'

 

   프로그레스바(진행률 표시)

 

  PerformStep

$items = @(1,2,3,4,5)
$ProgressBar1.Maximum = $items.Count
$ProgressBar1.Step = 1
$ProgressBar1.value = 0

foreach ( $item in $items ) 
{
    Start-Sleep -Seconds 1;
    $ProgressBar1.PerformStep()
}

PerformStep 메서드는 Step 속성의 양만큼 ProgressBar의 현재 값을 증가시킨다.

 

   리스트뷰

 

   컬럼/아이템 추가 

$listView.Columns.Add('First Name') # 컬럼
$item1 = New-Object System.Windows.Forms.ListViewItem('Item 1')
$item1.SubItems.Add('John')
$item2 = New-Object System.Windows.Forms.ListViewItem('Item 1')
$item2.SubItems.Add('smith') 
$listView.Items.AddRange(($item1,$item2)) # 아이템 추가


   클릭 이벤트

$listview.FullRowSelect = $true
$listview.Add_ItemActivate({DoSomething})
Function DoSomething()
{
    if($listview.SelectedItems.Count -eq 1)
    {
     echo $listview.SelectedItems[0].Text
     # 두 번째 컬럼 텍스트 가져오기
     echo $listview.Items[0].SubItems[1].Text
     }
}

   아이템 반환 및 초기화

listView1.Items.RemoveAt(0);
listView1.Items.Clear();

   컬럼 사이즈 자동 조절

$ListViewProcesses.AutoResizeColumns(0) # no resizing
$ListViewProcesses.AutoResizeColumns(1) # base width on header length
$ListViewProcesses.AutoResizeColumns(2) # base width on content length

 

반응형