반응형

백준 심화1 그룹단어 체크 c++ 풀이

 

 

 

 

 

 

풀이

a b c d e f g h i j k l m n o p q r s t u v w x y z
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

문자열=아스키코드

알파벳 소문자 a부터 소문자 z까지 크기가 26인 배열을 만든다음 0으로 초기화

벡터에 반복하여 저장한 입력 문자열의 각 문자에 접근한 값에서 97을 빼준다음

그 위치에 해당하는 알파벳의 값을 1 증가시켜줌

 

이때 문자열 aab인 경우 예외가 되므로 이전 문자와 현재 문자가 다른 경우에만 배열 값을 증가시킴

배열 값이 1을 초과하는 경우, 이전에 나온 문자가 한번 더 나와 그룹단어가 아니게 되므로 세지않음

 

사용 변수 용도 설명

 

cnt : 문자열 반복해서 입력받을 횟수

ans : 그룹 단어 확인 후 출력할 갯수 (정답)

vector<string> : 반복해서 입력받은 문자열 저장하는 벡터

int arr[] : 알파벳 중복 횟수 확인용

isGroupWord : 그룹 단어가 아닌 경우 구분 용도

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int cnt = 0;
    cin >> cnt;
    int ans = 0;
    vector<string> str;
    bool isGroupWord = true;
    for(int i=0; i<cnt; i++){
        string s = "";
        cin >> s;
        str.push_back(s);
    }
    for(int i=0; i<str.size(); i++){
        int arr[26] = {0,};
        string s = str[i];
        for(int j=0; j<s.length(); j++){
            if(s.length() == 1){
                cout << "글자 수 한 개일 때 : " << s << "\n";
                break;
            }
            if(s[j] != s[j-1]){
                cout << "현재 문자 : " << s[j] << ", 이전 글자 : " <<s[j-1] <<"\n"; 
                arr[s[j]-97]++;
                if(arr[s[j]-97] > 1) {
                    cout <<"중복된 글자 : " <<s[j] <<"\n";
                    isGroupWord = false;
                    break;
                }
            }
        }
        cout <<"문자 하나 체크 완료, ans 값 : "<< ans<< "\n";
        if(isGroupWord) {
            cout << "isGroupWord true 이므로 ans 증가 \n";
            ans++;
        }
        isGroupWord = true; //값 초기화
    }
    cout << ans;
    return 0;
}

 

 

 

 

 

반응형
반응형

 

 

지난번에 사용해본 새로운 인터넷 브라우저 WebView2의 다운로드 이벤트 처리하는 것을 다뤄봄

 

웹뷰2 방식을 사용한 인터넷 브라우저에서 파일을 다운로드 하는 경우,

자동으로 다운로드 폴더에 파일이 저장되는데

 

이때 FileSaveDialog 를 사용하여 사용자가 원하는 경로에 파일 저장할 수 있도록 커스터마이징 한 방식

 

파일 형식과 파일명은 다운로드할 때 자동으로 지정되는 형식과 파일명을 그대로 사용하였다

 

따라서 아래 방식으로는 저장할 때 파일 형식은 변경이 불가능한데 파일명만 가능한 상태로

형식 변경을 원하면 따로 수정해서 사용해줘야함

 

 

//웹뷰2 저장 경로 지정 커스터마이징
static string webSaveFilePath = "";

private bool? getSaveWebFilePath(string filePath)
{
	try
	{
		string fileExt = System.IO.Path.GetExtension(filePath).ToString();
		int strLen = fileExt.Length;

		webSaveFilePath = null;
		SaveFileDialog dlg = new SaveFileDialog();
		dlg.FileName = System.IO.Path.GetFileName(filePath).ToString();
		dlg.Filter = fileExt.Substring(1, strLen-1) + "|*" + System.IO.Path.GetExtension(filePath).ToString();

		bool? result = dlg.ShowDialog();

		if (result == true)
		{
			webSaveFilePath = System.IO.Path.GetFullPath(dlg.FileName).ToString();
		}
		return result;
	}
	catch (Exception ex)
	{
		Trace.WriteLine(ex.Message);
		return false;
	}
}


//웹뷰2 다운로드 이벤트 발생
private void WB_DownloadStarting(object sender, Microsoft.Web.WebView2.Core.CoreWebView2DownloadStartingEventArgs e)
{
	Microsoft.Web.WebView2.Core.CoreWebView2Deferral deferral = e.GetDeferral();
	string filePath = e.DownloadOperation.ResultFilePath;

	bool? saveResult = getSaveWebFilePath(filePath);
	
    //저장 취소 또는 오류 발생 시 저장 하지않음
	if (saveResult == null || saveResult == false)
	{
		e.DownloadOperation.Cancel();
		return;
	}
	System.Threading.SynchronizationContext.Current.Post((_) =>
	{
		using (deferral)
		{
			// Hide the default download dialog.
			e.Handled = true;
			e.ResultFilePath = webSaveFilePath;
		}
	}, null);
}

 

 

 

반응형
반응형

WebView2 사용방법

 

새로운 인터넷 웹뷰2를 사용하려면 패키지를 추가로 설치해주어야함

아래 스샷참고하여 패키지 설치를 먼저한 다음 코드를 작성해주면 됨

 

솔루션 우클릭 후 솔루션용 Nuget 패키지 관리 클릭

 

 

찾아보기 후 Webview 검색한 다음 Microsoft.Web.WebView2 클릭

 

 

webview를 선택한 다음 안정적인 버전 설치를 눌러 패키지 설치를 마침

 

 

 

 

Microsoft.Web.WebView2.Wpf.WebView2 webView = null;

public MainWindow()
{
    InitializeComponent();
    if (webView == null) webViewInit();
}


private void webViewInit()
{
    webView = new Microsoft.Web.WebView2.Wpf.WebView2();
    webView.Loaded += webView_Loaded;
}

private async void webView_Loaded(object sender, RoutedEventArgs e)
{
    webView.Source = new Uri("http://www.naver.com");    
    await webView.EnsureCoreWebView2Async(); //초기화하여 null return 방지
    
    //webView.CoreWebView2.Settings.AreDefaultContextMenusEnabled = false;
    //우클릭 방지, 웹뷰 새로 로드하거나 페이지 변경되면 false 풀려서 load할 때마다 추가해줘야됨
}


private void callWebView_Click(object sender, RoutedEventArgs e)
{
    webViewGrid.Children.Add(webView);

}

 

 

webView.CoreWebView2.Settings.AreDefaultContextMenusEnabled = false;

사용한 웹뷰2에서 우클릭 방지를 하고싶다면 ContextMenusEnabled 값을 false로 주면 된다

 

 

<Window x:Class="webView.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:webView"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>
        <Canvas Background="SkyBlue" Grid.Row="0">
            <Button x:Name="callWebView" Click="callWebView_Click" >웹뷰열기</Button>
        </Canvas>
        <Grid  Background="Salmon" Grid.Row="1" x:Name="webViewGrid"></Grid>
    </Grid>
</Window>

 

 

 

참고 : https://learn.microsoft.com/en-us/microsoft-edge/webview2/get-started/winforms

 

Get started with WebView2 in WinForms apps - Microsoft Edge Development

Getting started guide for using WebView2 for WinForms apps.

learn.microsoft.com

 

반응형
반응형

보통은 CP850 인코딩 방식을 사용하므로 영어가 아닌 언어를 사용할때는 그에맞는 방식을 추가해주어야 한다 함

따라서 영어가 아닌 언어를 쓸때는 다른 코드페이지로 변경해주어야한다

 

※코드페이지 란

코드 페이지(code page)는 특정한 문자 인코딩 테이블을 위해 쓰이는 전통적인 IBM 용어이다.
문자 인코딩 테이블 부터 255까지의 정수를 표현하는 단일 옥텟(octet, 바이트)이라고 불리는 일련의 비트들이 특정한 문자와 결합하여 표화(mapping)한 것이다.
IBM과 마이크로소프트는 코드 페이지를 문자열 집합(charset)에 자주 할당한다.

 

437 원래의 IBM PC 코드 페이지
737 그리스어
850 "다중 언어 (라틴 1)" (서양 유럽 언어) 
852 "슬라브어 (라틴 2)" (동유럽 언어) 
855 키릴 자모 알파벳 
857 튀르키예어 
858 "다중 언어" - 유로 기호 
860 포르투갈어 
861 아이슬란드어 
863 프랑스 캐나다어 
865 북유럽어 
862 히브리어 
866 키릴 자모 알파벳 
869 그리스어 
10000 매킨토시 로마어 인코딩 (몇몇의 다른 맥 문자열 세트를 따름) 
10007 매킨토시 키릴 자모 인코딩 
10029 매킨토시 중앙유럽어 인코딩
932 일본어 지원 
936  GBK 중국어 간체자 지원 
949 한국어 지원 
950 중국어 번체자 (대만) 지원 
1200 UCS-2LE 유니코드 little-endian 
1201 UCS-2BE 유니코드 big-endian 
65000 UTF-7 유니코드 
65001 UTF-8 유니코드 
ASMO449+ 아랍어 지원 
MIK 불가리아어, 러시아어 지원

 

 

한글 utf-8 인코딩 방식 기준으로 65001로 변경하여 사용

 

chcp 65001

 

 

 

 

참고 : https://ss64.com/nt/chcp.html

 

CHCP - Change Code Page - Windows CMD - SS64.com

Change the active console Code Page. The default code page is determined by the Windows Locale. This command is rarely required as most GUI programs and PowerShell now support Unicode. When working with characters outside the ASCII range of 0-127, such as

ss64.com

https://stackoverflow.com/questions/1427796/batch-file-encoding

 

Batch file encoding

I would like to deal with filename containing strange characters, like the French é. Everything is working fine in the shell: C:\somedir\>ren -hélice hélice I know if I put this line in a .ba...

stackoverflow.com

https://ss64.com/nt/chcp.html

 

CHCP - Change Code Page - Windows CMD - SS64.com

Change the active console Code Page. The default code page is determined by the Windows Locale. This command is rarely required as most GUI programs and PowerShell now support Unicode. When working with characters outside the ASCII range of 0-127, such as

ss64.com

 

반응형
반응형

 

 

난독증이 있는 상수 이야기

 

풀이

 

입력은 세자리 문자열 2개가 들어온다

입력된 숫자(사실은 문자열임)의 배치를 반대로 바꾸어준 다음 비교하여 큰 값을 출력해주면 된다

(문자(char)에 저장된 숫자도 int형 숫자처럼 비교가 가능)

 

입력받은 문자열을 반대로 만든다음 맨 앞자리부터 비교한 다음 큰 수를 출력했다

반대로 만든 문자열의 한자리씩 비교하는 반복문 도중에

큰수가 있으면 출력 후 바로 리턴시켜서 종료했는데

 

이때 두 수가 같은 경우 반복문 내에서 결론이 나오지 않기때문에 반복문이 끝나고 둘 중 하나를 출력해주고 마무리시켰다

 

 

코드

 

#include <bits/stdc++.h>
using namespace std;
int main() {
	string str1,str2;
	cin >> str1;
	cin >> str2;
    
    //변환할 문자열
	string str1_, str2_;
    
    //문자열 반대로 변환
	for(int i=2; 0<=i; i--){
		str1_ += str1[i];
		str2_ += str2[i];
	}
    //앞자리부터 비교
	for(int i=0; i<3; i++){
		if(str1_[i] > str2_[i]){
			cout << str1_;
			return 0;
		}else if(str1_[i] < str2_[i]){
			cout << str2_;
			return 0;
		}
	}
    //반복문이 종료될때까지 큰수가 나타나지 않는다면 둘다 같은 수이므로 둘중에 하나를 출력했음
	cout << str1_;
	return 0;
}

 

 

출처 : https://www.acmicpc.net/problem/2908

 

2908번: 상수

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두

www.acmicpc.net

 

반응형
반응형

백준 문자열 단어의 개수 풀이

다양한 사례를 생각하지 못해서 연달아 틀리다가 겨우 맞음

 

 

 

 

 

풀이

띄어쓰기 -> ' '

문자가 끝난것을 알려주는 기호 -> '\0'

 

이거 2가지를 미리 알고있으면 문제 푸는게 쉬움

 

 

char 배열의 마지막에는 null 문자가 있어 문자가 끝났다는것을 알수있고 억저고 ~

관련된 깊은 지식은 따로 검색 ㄱㄱ

 

일단 입력 범위가 굉장히 광범위하므로 입력의 크기인 백만개보다 하나 큰 만큼의 char 배열을 만든다음

그 중에서 실제로 사용자가 입력한 만큼만을 입력받아 처리했다

 

cin으로 입력을 받으면 띄어쓰기만 해도 입력이 종료되므로 평소와는 다른 입력 방식을 사용해야 함

getline 을 이용하여 사용자가 입력한 만큼 입력받아 미리 만들어둔 배열에 저장한 다음

 

문자 하나하나 확인하여 처리하면 됨

 

 

입력된 문자열이 (     ) 공백으로만 존재하거나 (     a) 공백부터 시작하여 마지막에 알파벳이 나올수도있으므로

띄어쓰기를 기본으로 숫자를 세지말고 알파벳을 기준으로 단어를 인식하게 함

 

아스키코드를 사용해서 문자의 알파벳 여부를 확인함

외우자

알파벳은 아스키코드 65~90, 97~122이다

 

배열에 저장된 각 문자를 반복해서 돌때 알파벳을 마주치면

그 다음 문자가 공백인지 확인 후, 공백이 맞다면 단어의 개수를 하나 증가시켜주고

공백이 아니라면 계속 알파벳이 나오고 있다는 뜻이므로 그냥 무시했다

 

알파벳이 아닌 배열의 끝을 알리는 \0 문자를 마주친다면

마지막 문자의 바로 앞에 위치한 문자가 공백인지 확인 후, 공백이 아니라면 그것 또한 단어이므로 ex) (a   b)

단어의 개수를 하나 증가시키고 반복을 멈추고 단어의 개수를 출력하면 된다

 

 

코드
#include <bits/stdc++.h>
using namespace std;
int main() {
	int cnt=0;
	char arr[1000001];
	cin.getline(arr, sizeof(arr));
	for(int i=0; i<=sizeof(arr); i++){
    		//a~z 또는 A~Z
		if(65<=arr[i] && arr[i]<=90 || 97<=arr[i] && arr[i]<=122){
			if(arr[i+1] == ' ') cnt++;
		}// ' ', '\0', '\n'
		else{
			if(arr[i] == '\0') {
				if(arr[i-1] != ' ') cnt++;
				break;
			}
		}
	}
	cout << cnt;
	return 0;
}

 

 

 

출처 : https://www.acmicpc.net/problem/1152

 

1152번: 단어의 개수

첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열

www.acmicpc.net

 

반응형
반응형

 

문제 요약

알파벳으로 이루어진 입력 문자열에서 가장 많이 사용된 알파벳 대문자로 출력

가장 많이 사용된 알파벳이 2개 이상이라면 물음표 ? 출력

 

풀이 과정

알파벳 대문자(A~Z)는 아스키코드 65부터 90까지이며

알파벳 소문자(a~z)는 아스키코드 97부터 122까지이다

 

위의 두가지를 사용해서 처음에는 알파벳 a부터 z까지 해당하는 배열을 만들려고했으나

돌면서 중복 값을 찾는게 귀찮아서 벡터로 전환해서 해결했다

 

 

인덱스와 값으로 알파벳에 접근가능한 배열

A B C D E F G H I J K L M N O P W R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

아스키코드 65가 A이므로

index가 0인 경우, 65를 더한 다음 char 화하여 출력해주면 A가 출력이 되는 방법을 사용했다

 

초기값을 -1로 세팅해서 입력 문자열 str에 특정 알파벳이 나올 때마다

65나 97을 뺀 값을 벡터의 인덱스로 사용하여 증감연산자로 값을 1씩 올려준다

 

이때, 최대값을 저장하는 max와 최대값의 위치를 저장하는 index도 함께 업데이트를 해준다

 

문자열에서 반복되는 알파벳을 모두 체크한 다음 count를 사용하여 벡터에서 특정 max 값의 갯수를 센다

max의 값이 2개 이상이라면 물음표를 출력하고

그렇지 않는 경우에는 index에 65를 더하여 문자로 출력시켜주면 끝

 

 

코드

#include <bits/stdc++.h>
using namespace std;

int main() {
	vector<int> v1(26,0);
	string str;
	cin >> str;
	
	int tmp = 0;
    
	int index = 0;    
	int max = -1;
    
	for(int i=0; i<str.length(); i++){
    		//소문자
    		if(97 <= str[i] && str[i] <=122) {
			v1[str[i] - 97]++;
			if(max < v1[str[i] - 97]){
				max = v1[str[i]-97];
				index = str[i]-97;
			}
		}
        	//대문자
        	else if(65 <= str[i] && str[i] <= 90){
			v1[str[i] - 65]++;
			if(max < v1[str[i] - 65]){
				max = v1[str[i]-65];
				index = str[i]-65;
			}
		}
	}
    
	int cnt = count(v1.begin(), v1.end(), max);
	if(2<=cnt) cout << "?";
	else cout << char(index + 65);
	return 0;
}

 

 

 

 

출처 : https://www.acmicpc.net/problem/1157

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

 

반응형
반응형

문자열 반복해서 새로운 문자열을 만드는 문제

문제만보면 되게 쉬워보이는데 이전에 제출한게 틀려있길래 간만에 겸사겸사 풀어봄

 

 

 

 

 

 

 

#include <bits/stdc++.h>
using namespace std;

//횟수만큼 반복해서 새로운 문자열 만들어주는 함수
int makeStr(int cnt, string str){
	//한번씩 출력할 문자열
	string tmpStr;
	
	for(int i=0; i<str.length(); i++){
		for(int j=0; j<cnt; j++){
			tmpStr += str[i];
		}
	}
	cout << tmpStr;
	return 0;
}

int main() {
	//전체 반복 횟수
	int totalCnt = 0;
	cin >> totalCnt;
	
    //makeStr 함수 호출 시 사용되는 변수 (횟수와 문자열)
	int tmpCnt = 0;    
	string tmpStr;
    
	for(int i=0; i<totalCnt; i++){
		cin >> tmpCnt;
		cin >> tmpStr;
		if(i>0) cout << "\n";
        //첫번째 입력이면 한번 출력 후 new line 필요없으므로
        //출력이 1이상일때부터 출력하도록 함
		makeStr(tmpCnt, tmpStr);
	}	
	return 0;
}

 

 

처음에 풀때는 메인함수에서 입력을 다 처리해주다가

그냥 문자열을 새로 만들어주는 함수 makeStr을 작성해서 호출하도록 했다

 

문자열 특성 상 배열처럼 인덱스 접근이 가능하므로

새로 만들 임시 문자열 tmpStr에 할당 연산자(+=)로 반복해야 하는 횟수만큼

i번째 문자열을 j(=cnt)번만큼 더해주었다

 

 

 

출처: https://www.acmicpc.net/problem/2675

 

 

2675번: 문자열 반복

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다

www.acmicpc.net

 

반응형
반응형

 

 

 

'npm'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.

처음 이런 문구를 맞닥뜨리면 당황스러울 수 있는 표현인데
한번 처리를 하고나면 편-안 해지는 문장이다

대충 npm을 맞게 설치 했다면, npm이 설치된 폴더가 아닌 다른 위치에서도 사용할 수 있도록해주는 걸
환경 변수 설정이라고 하는데

이러한 환경변수 설정을 따로 해주어야
cmd에서 node나 npm 명령어를 아무데서나 호출하여 사용할 수 있다

 

 

 

환경변수 설정하는법은 아래 스샷 참고

 

window 키 누른 다음, 환경 변수 검색

시스템 환경 변수 편집 ㄱㄱ

 

 

고급 탭 아래의 환경 변수 클릭

 

 

 

 

아래쪽의 시스템 변수에서 변수명이 Path인 곳을 찾아 더블클릭 또는 편집 ㄱㄱ

 

 

우측 상단의 새로만들기 또는 빈칸을 더블클릭하여 아래의 폴더 위치를 복붙하자

 

 

윈도우 기준 노드 설치 위치

C:/Program%20Files/nodejs/

 

 

확인 - 확인을 눌러 세팅을 완료하면

node 설치 폴더가 아닌 다른 모든 위치에서 node 사용이 가능해진다

 

 

 

 

참고 : 

https://stackoverflow.com/questions/27864040/fixing-npm-path-in-windows-8-and-10

 

Fixing npm path in Windows 8 and 10

Have done a lot of googling, tried reinstalling node.js using the official installer, but my npm pathing still doesn't work. This doesn't work npm install foo I get an error message saying missing

stackoverflow.com

 

반응형
반응형

https://studyingpingu.tistory.com/77

 

[C#] 그리드 영역 나누는 RowDefinition과 GridSplitter 동적 생성하는 법

grid를 분할할수있는 RowDefinition과 분할 영역을 자유롭게 바꿀수있는 gridsplitter를 c# 코드적으로 생성하는 법을 기록해봄 이 방법을 응용하면 columndefinition에도 적용이 가능하다 gridsplitter란 진짜..

studyingpingu.tistory.com

 

 

 

 

저번글에 이어 조금더 완성도가 높아진 gridsplitter 글

 

 

그리드의 row, column의 영역을 마우스 드래그로 조절할수있는 gridsplitter 추가 예제

 

divideCnt만 정해주면 그만큼 gridsplitter 추가해주는 코드

 

public void divideRowAuto()
{	
	if (divideCnt == 0) return;

	double dividedHeight = mainGrid.Height / divideCnt;

	mainGrid.RowDefinitions.Clear();
	mainGrid.Children.Clear();

	//첫번째 로우
	RowDefinition row = new RowDefinition()
	{
		Height = new GridLength(dividedHeight, GridUnitType.Star),
		MinHeight = 30
	};
	mainGrid.RowDefinitions.Add(row);

	for (int i = 1; i <= (divideCnt - 1) * 2; i += 2)
	{
		RowDefinition row1 = new RowDefinition()
		{
			Height = new GridLength(15),
			MaxHeight = 15,
			MinHeight = 15
		};

		GridSplitter splitter1 = new GridSplitter()
		{
			VerticalAlignment = VerticalAlignment.Center,
			HorizontalAlignment = HorizontalAlignment.Stretch,
			ResizeBehavior = GridResizeBehavior.PreviousAndNext,
			Background = new SolidColorBrush(Colors.Red),
			Height = 2
		};
		mainGrid.RowDefinitions.Add(row1);
		mainGrid.Children.Add(splitter1);
		
		Grid.SetRow(splitter1, i);
		Grid.SetColumn(splitter1, 0);

		RowDefinition row2 = new RowDefinition()
		{
			Height = new GridLength(dividedHeight, GridUnitType.Star),
			MinHeight = 30,
		};

		mainGrid.RowDefinitions.Add(row2);
	}
}

 

코드 요약

gridsplitter는 독립된 row에 하나씩 배치된다

rowdefinition은 추가하면 이거 자체가 row다 보니 순서대로 추가가 되지만

gridsplitter를 생성한 다음 그리드에 추가하고 row를 세팅해줘야 분할하고자 하는 위치에 정확하게 추가된다

 

gridsplitter 1개가 생기면 row는 총 3개가 된다

 

 

 

6분할 예시 (divideCnt가 6인 경우 gridsplitter는 5개가 생성됨)

 

반응형

+ Recent posts