반응형




정말 오래간만에 포스팅 합니다 ㅎㅎㅎ

다름이 아니라 제가 요즘 아잉폰이 와서 좀 가지고 논다고 -ㅅ-

하지만 맥이 없어서 앱 개발은 못해보는군요 물론 개발자 등록도 안되어있지만 ㅋㅋ

오늘 아잉폰 덕에 찰스 페졸드 아저씨의 프로그래밍 윈도우즈 폰 7 pdf를 보고 있습니다.

찰스 페졸드 아저씨 다들 아시죠?

제가 아저씨라고 쉽게 말 하고 있지만 이 분은 Microsoft Press류 책 좀 보신 분들은 아실 겁니다. 꽤 유명하신 분입니다.

이분야 에선 진정한 고수반열에 오르신 분이죠. … (하지만 사진으로라도 뵌 적은 없습니다)


제가 공부하고 있는 상황을 알려드리자면 (아직 15페이지 밖에 못 봤습니다. 올 영문이라 -ㅅ-)

1. 초기에 나오는데 일단 우리가 만드는 프로젝트 자체를 실버라이트 어플리케이션이라고 부르시더군요.

그래서 혹시나 하고 봤더니 프로젝트 선택에 실버라이트 어플리케이션 템플릿을 선택해도 같더군요! (너무 썰렁한가)

2. XAML 을 자멜 이라고 부른다고 하더군요 -ㅅ-. 사멜? 자멜? …뭐 그렇답니다.

부가적으로 폼 디자인에 들어가는 XAML과 관련 XAML파일들은 WPF(Windows Presentation Foundation)을 따른다고 합니다.

뭐 지금까지 본건 이정도 네요. 물론, 지금은 화면해상도가 어쩌고, 픽셀은 포인트로 바뀔 때 이렇게 계산된다 이 부분을 보고 있습니다. 영어 해석은 잼병이라 좀 걸리네요 ~_~.


관련 자료는 다른 블로그에 누군가 직역 + 의역으로 해석해주시는 분이 계신 거 같던데 거길 참조해주세요 ~_~.

저는 그냥 느끼듯이 읽어 내려가서 설명하기 어려운 부분이 많군요.

이럴 줄 알았으면 20대 초에 번 돈 노는데 쓰지 말고 어학연수나 다녀 올걸…



자 오늘은 Class Library 사용법에 대해서 잠깐 써볼까 합니다.

언제나 같이 따라 하면서 익히세요.

VS.NET 에서 제공하는 언어들의 Class Library 만드는 법과 동일합니다. 혹 알고 계신 분은 패스~

우선 테스트도 해야 하니 기본 어플리케이션 템플릿으로 프로젝트를 만드세요




지금부터 잘 보세요




푸른색 화살표가 가르키는 항목은 “솔루션” 이라고 합니다.

붉은색 화살표가 가르키는 항목은 “프로젝트”라고 합니다.

눈에 익혀두시길…

클래스라이브러리는 만드는 방식이 프로젝트 단위로 가져올 수 도, 동일 프로젝트 내에 둘 수도 있습니다.

엄밀히 따지자면 동일한 네임스페이스 아니냐 이지만, 동일 프로젝트 내에서 파일을 만들어서 네임스페이스를 따로 둘 상황이라면 초보 거나 조금 특이한 상황일겁니다.

오늘 해 볼 것은 동일한 프로젝트 내, 다시 말해 동일한 네임스페이스 내에서 클래스를 만들어 사용 해 보겠습니다.

(다음시간엔 뭘 해야 할지 나와버리는군요! ㅎㅎ)

이 녀석입니다.



저는 이렇게 했습니다.





그리고 Add 누르셔서 만드시면.




추가 된 것을 확인 하실 수 있을 겁니다.

자 네임스페이스가 동일한지 확인 해 봐야겠죠?

   


당연히 동일 해야죠 ~_~..

자 그럼 우리는 HelloClass.cs 에 멤버 메서드를  추가 해 봅시다.



#region public string HelloString
public string HelloString()
{
    return "Hello Class";
}
#endregion



추가한 멤버 메서드는 위와 같고 설명을 드리겠습니다.

public 의 string값을 반환하는 HelloString이라는 메서드가 되겠습니다.

public 은 접근 지정어로 모든 곳에서 접근, 사용이 가능하다 라는 의미로 받아들이면 되겠습니다.

참고로 쓰지 않으며 private로 디폴트로 설정이 됩니다.

private는 상속받은 클래스나, 동일 클래스만 사용가능이 되겠습니다. (기타 세세한 건 찾기 귀찮으므로 패스~)

그리고 해당 메서드의 리턴값은 “Hello Class”가 되겠군요.

참고로 #region ~ #endregion 은 보기 좋게 묶을 때 사용하는 매크로성 예약어 입니다.

코드작성 하는 곳 좌측에 열림 표시 보이죠? 저걸 마우스로 클릭하게 되면





이렇게 됩니다. 좋은 기능이죠. 코드 짤 때, 이전 코드 반영시켜가면서 새로 짤 때 쓰면 상당히 좋습니다.

그냥 보기도 좋고 … ~_~

자 그럼 클래스를 만들었으니 사용해 봅시다.

디자이너로 돌아와서 Button 하나를 올리고 이벤트 등록을 합시다. (버튼 더블클릭!)




코드를 저는 이렇게 구성합니다.

 

private void button1_Click(object sender, RoutedEventArgs e)
{
    ClassLibrary.HelloClass hc = new ClassLibrary.HelloClass(); // 1
    string str = hc.HelloString();                                                 // 2
    MessageBox.Show(str);                                                     // 3
}



아까 이야기한 접근지정어 private이 나왔군요!

설명들어갑니다.

1. ClassLibrary 네임스페이스의 HelloClass 의 객체 인스턴스 hc에 동적으로 만들어서 할당.

-> 참고로 네임스페이스는 동일하기에 ClassLibary라는 부분은 빼도 상관없습니다.

     다음 포스트에서 볼 것이랑 길이가 다르면 헷갈릴 테니 그러는 것 뿐입니다.

2. string형 변수 str에 hc의 HelloString() 메서드의 결과 값 할당.

3. MessageBox.Show(string ..) 메서드로 str값 출력. (그냥 str값이 출력되는 메시지 박스가 뜹니다)


자 그럼 우리가 좋아하는 디버그로 결과를 보죠!



에뮬레이터가 뜨면 버튼을 클릭.

     


어떤가요? 참 쉽죠잉~

단순히 string값만 처리 했지만 원래는 다른 컨트롤 변수도 똑같이 제어가 가능하답니다.

어흑 벌써 12:30분 ~

저는 잘 시간입니다. 다음 포스트 최대한 빨리 올릴게요 ^-^

반응형
반응형



아 그냥 자기 뭣해서 바로 포스팅 합니다.

오늘 할 것은 Media Player 만들기 2번째

MediaPlayer 라는 녀석을 써 보려 합니다.


- MediaPlayer

좋은 자료를 찾았습니다. 우리가 할게 이것을 응용한 것이죠 ~_~.
http://msdn.microsoft.com/ko-kr/library/ff634558.aspx


백문이 불여일코딩 입니다. 따라 해 보시죠~

일단 프로젝트를 만듭시다. 템플릿은 기본으로오~




디자이너에서 TextBox를 이렇게, 그리고 버튼을 놓습니다.

TextBox 컨트롤의 명은 textBox1 일 텐데 Text Propertie 를 수정합니다

http://www.robtowns.com/music/blind_willie.mp3

요 녀석으로 !

그럼 아래와 같이 되겠죠?




자 바로 MediaPlayer를 생성했는데 없다고 하네요?

MediaPlayer 라는 타입 또는 이름의 네임스페이스가 없다는 메시지입니다 (해석 어렵지 않죠?)

그럼 그 녀석이 있는 걸 참조로(Reference) 추가를 해야겠군요. 이건 C#, 아니 VS.NET의 기본이죠!





제가 다 찾아놨습니다. 아래와 같이 따라 하시면 되겠습니다.

[시술 전]



[시술 과정 1]



[시술과정 2]



[시술 과정 3 - 그냥 넘어갑시다… 피곤해서 ㅎㅎ]



[시술 후]



자 참조를 추가했으면 네임스페이스를 선언해야 합니다

아래와 같이 선언 ㄲㄲ




추가되는 텍스트는 아래에서 긁으셔도 됩니다.

익숙하신 분은 using 스페이스 Microsoft. 찍어서 찾아서 하시겠지요. 코드 헬퍼 짱 입니다요~

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Media;

그리고 이렇게 button1 을 더블 클릭하여 클릭 메서드를 만든 후

다음과 같이 코드를 추가합니다.



private void button1_Click(object sender, RoutedEventArgs e)
{
     FrameworkDispatcher.Update();                          // 1

     Uri uriStreaming = new Uri(this.textBox1.Text);        // 2
     Song song = Song.FromUri("StreamingUri", uriStreaming);// 3

     MediaPlayer.Play(song);                                // 4

}



또 간략한 설명!



1. 파워의 상태나 미디어가 업데이트 되면 호출해줘야 한다는 군요.

    msdn코드샘플엔 없던데, 에뮬레이터 오류인지 모르겠군요. 일단 넣어야 예외가 발생하지 않으므로 추가

2. Uri의 객체 uriStreaming 에 textBox의 Text Propertie 의 값을 인자로 하는 Uri객체를 동적으로 만들어 할당

3. Song의 객체 song에 Song 클래스의 멤버 메서드  FromUri에 위와 같은 두 인자를 넣은 리턴 결과를 할당.

   - 말은 어렵지만 Song을 생성한 후 우리가 원하는 Uri값으로 된 Song을 만들어 할당한 겁니다.-

4. MediaPlayer.Play 호출 인자는 우리가 만든 지역변수  song




MediaPlayer는 왜 변수화 하지 않느냐라는 질문을 하실 수도 있는데,

MediaPlayer를 찍고 go to Difinition 해보시면 Static Class로 정의 되어 있는 것을 보실 수 있을 겁니다.




현재 API상으로는 MediaPlayer 클래스는 음악 파일만 재생이 되는 거 같군요.

VS9.0 에서의 MediaPlayer와 차이가 있는가 봅니다.

Reference를 잘 찾아보질 않아서 대충 말하는 겁니다. 정답은 아니에요~_~




그럼 디버그로 확인해보죠

 




뭐 당연히 됩니다

에뮬레이터를 종료할 때 문제가 생기는 것을 제외하고는요.




제가 에뮬레이터의 문제라고 생각하는 이유가

http://msdn.microsoft.com/ko-kr/library/ff634558.aspx 

위 자료를 찾은 곳이

http://msdn.microsoft.com/ko-kr/library/microsoft.xna.framework.media.mediaplayer.aspx

이곳의 하위 인데 말이죠.

문서 하단을 보시면


Platforms


Xbox 360, Windows 7, Windows Vista, Windows XP, Windows Phone 7



이 보입니다.

ㅎㅎ 버그가 아니라면 되야 정상이란 거죠 ~_~

그러니 에뮬레이터 문제로 치부 ㄲㄲ





그럼 이제 뭘 포스팅 할지 내일 또 고민해 봐야겠습니다.

여러분 다음 포스트에서 만나요~~~


ps. 너무 피곤해서 대충 썼으니 이해 바래요 ㅠㅠ

반응형
반응형



오늘 대박 늦잠을 잤네요.

춥기도 하고 … 밤새 좀 포스팅 쓴다고 바빴더니… ㅎㅎ


오늘은 코드샘플을 뒤져서 간략한 예제 프로그램을 만들어 볼까 합니다.

너무 이른 듯 하지만!!!!

Media Player!!!!!!!!!!!!!!!!!!!!!!!!!

뭐 거창하게 말해도 이건 그냥 MP3플레이어 라 보시면 됩니다. ㅎㅎㅎ

자 이제 제 스타일을 아셨을 테니 그냥 따라 하시면 됩니다.

빈 프로젝트를 생성합니다. 이름은 그냥 MediaPlayer





일단 빈 프로젝트가 열리면 우리는 사용할 컨트롤이 어느 라이브러리에 속해 있는 지 알아봐야겠습니다.

왜냐?  Toolbox에는 미디어 플레이어가 없거든요

… 네? 있습니다! 졸고 계신 분 있지 않나 해서 한번 테스트 해봤습니다.

아래 보시다시피 MediaElement 가 그런 녀석이죠.




하지만 모두가 아시다시피 마이크로소프트 개발도구에 딸려온 기본 컨트롤은 이상하게 제약이 많았더라…

네! 그래서 찾아봤습니다. VS9.0 기준으로 두 가지로 분류가 나뉘더군요

http://msdn.microsoft.com/ko-kr/library/aa970915(VS.90).aspx

그냥 보세요. ~.~ 다음 포스트에서 두 번째 것을 해볼 테니까요.

MSDN을 따르자면 다음과 같습니다.

오디오 비디오 각각 또는 둘 다 재생하는 도구로는 MediaElement 클래스 와 MediaPlayer 클래스가 사용이 됩니다.

두 클래스는 유사점을 을 가지고 있고 서로 응용해서 쓸 수 있다고 하는군요.

(여기서부터 제 생각 입니다)

하지만 역시나 MediaPlayer 클래스가  MediaElement  클래스보다는 조금 더 동적인 것 같군요.

그래서 두 가지 다 해보겠지만 오늘은 시간상 (벌써 10시 52분 오후!) MediaElement예제를 간단히 해보겠습니다.


MediaElement


MediaElement 컨트롤을 툴 박스에서 디자인으로 드래그엔 드롭, 그리고 동작을 시키기 위한 버튼 을 드래그 앤 드롭.





MediaElement 컨트롤을 좀 키워봤습니다.

이런 모습이네요.

제가 여러 동영상과 음악 링크를 구했습니다.

검색엔진에서 sample avi, movie, mp3 등 쳐보시면 구해 질 수 있는 것 입니다.

http://www.jhepple.com/support/SampleMovies/WindowsMedia.wmv

http://www.jhepple.com/SampleMovies/niceday.wmv

http://www.jhepple.com/SampleMovies/niceday.asf

http://www.robtowns.com/music/blind_willie.mp3


테스트 해 볼 녀석들 입니다.

XAML 파일은 따로 건드리지 않을 거니 바로 비하인드 코드로 가봅시다.
그럼 버튼을 더블 클릭하여 해당 메서드로 이동 고고싱~ 싱나게~!




간단하게 코드를 구성 해 보았습니다.

private void button1_Click(object sender, RoutedEventArgs e)
{
    this.button1.IsEnabled = false;                                                                            // 1

    Uri u = new Uri("http://www.jhepple.com/SampleMovies/niceday.asf");     // 2
    this.mediaElement1.Source = u;                                                                          // 3
    this.mediaElement1.Volume = 100;                                                                       // 4
    this.mediaElement1.Play();                                                                                 // 5
}



간략한 설명!

1. 버튼의 상태를 사용할 수 없게 만들기

2. Uri 객체 u를 생성합니다. 웹에 있는 파일을 로드 하게 되는데 그 주소는

http://www.jhepple.com/SampleMovies/niceday.asf

3. mediaElement1 객체의 Source 라는 Propertie 에 위에 생성한 u를 할당.

4. 혹시나 재생이 되는데 소리가 안 나올까 mediaElement1 객체의 Volume 이라는 Propertie 값을 100 으로!

5. mediaElement1 객체의 재생 메서드 Play();

그리고 디버깅으로 확인 해 보시져~




 


어플리케이션 구동 후 Button을 누르면 사용 불가능 상태로 바뀌는군요. 여기까진 OK!

하지만 재생이 안되네요. 아닙니다. 로딩이 긴 겁니다. 기다려봐요~

여러 번 Button을 눌러 혼선을 줄 사용자를 위해서 첫 코드를 버튼 비활성화 시켰지요.





짠 나왔죠?

사실 약간의 불안함이 있습니다.

에뮬레이터라 그런 것 같기도 하고 프로그래스 바를 만들어 확인해보지도 않아서 자세히는 알 수가 없죠.

그래서 제가 준비해온 mp3링크를 가지고 해보시면 잘 나옴을 알 수 있을 겁니다.

다음 포스트에서는  MediaPlayer 클래스를 사용해 봅시다


반응형
반응형


약속도 많고 이런 저런 업무 때문에 간만에 글을 씁니다.

오늘 보셨나요 GSL 2 임요환 vs 이윤열 !! 와우~ 잼있네요~ 씽나네요~ 둘 다 잘 싸웠습니다.

스타크래프트 2 방송경기 중에 이렇게 전세의 향방을 어디로 둬야 할 지 모를 게임  처음이군요.

사실 GSL1 이나  GSL2 이전 경기는 확실히 중소규모 경합이 일어나면 전세를 확인 할 수 있는 게 대부분이었으니 ㅎㅎ


오늘 해볼 공부는

- WebBrowser 컨트롤

입니다.

네 배포 된 프로그램 내서 별도 브라우저 없이(엄밀히 하자면 있겠죠)

웹 서핑이 가능하게 해주는 컨트롤 사용이죠~ 한번 쉽게 가 보아요~

아래와 같이 템플릿을 구성하시고




그리고 툴 박스를 이용하여 이렇게 화면을 꾸며보세요.

또한 원래 있던 “MYAPPLICATION”“WebBrowser 컨트롤”

“page name”“웹 브라우징”으로 변경 해보세요. 

해당 컨트롤 마우스 우 클릭 후 Properties를 선택하면 그 항목 중 무엇을 바꾸어야 할지는 다 보일 겁니다.



이 프로그램은 다음과 같이 동작할 겁니다.

Button 을 누르게 되면 TextBox에서 입력한 주소 값을 아래 WebBrowser 컨트롤에서 보여줄 것

그러기 위해서는 TextBox의 TextBox문구를 사용 가능한 URL을 표기 해놓아야 혼동이 되지 않겠죠?

그럼 바꿉시다. http://lovapi.tistory.com 으로  유후~




그리고 저번 포스트에서 배운걸 그대로 사용합니다.

Button 컨트롤을 더블 클릭하면 기본이벤트가 Button의 Click 이벤트이고 그렇게 이벤트 핸들러에 등록될 함수를 만듭시다.

Button 컨트롤 더블클릭 ㄱㄱ




이렇게 함수가 생겼죠?

혹 궁금해 하시는 분을 위해서 추가 설명 드리겠습니다.

private void button1_Click(object sender, RoutedEventArgs e)  …  함수의 이벤트는 어디에 생성되느냐 ?

눈치 빠르신 분들은 찾으셨을 겁니다.




네 맞습니다. 웹 프로그래밍 같은 느낌으로 XAML에 정의가 되어있네요. 참 쉽죠잉~

자 그럼 WebBrowser에 대해서 사용법을 알아야 하는데, Button 아래 선언된 XAML코드가 보입니다.

사실 C#.NET 코드로 제어를 하려면 저 녀석의 네임스페이스와 선언방식을 알아야 되죠.

그래서 우리는 아래와 같이 WebBrowser 컨트롤의 Properties를 먼저 찾아봅시다.




WebBrowser 타입 클래스의 webBrowser1 이라고 변수가 정의 되어있네요.

ASP. NET을 기억해 봅니다. .ascx 파일에서 정의된 일부 개체들은 속성에 정의된 명칭대로 변수로 호출 되었죠?

그 기억으로 해당 함수(사실 C#에선 메서드-Method-라고 부릅니다)내에서 this. 찍어보니…




아니나 다를까… 있군요. 사용해봅시다. 어느 VS/VS.NET의 WebBrrowser 컨트롤과 마찬가지로

Navigate라는 멤버 메서드가 해당 웹페이지로 이동이 되겠습니다.

WebBrowser.Navigate는 두 개의 메서드 로 오버로딩 되어있는데 저는 다음의 메서드를 사용합니다.

public void Navigate ( 	Uri url )


Uri 클래스는 생성자를 통해 string 형 값으로 개체를 생성할 수 있군요.

public Uri ( string uriString )


그리하여 완성된 코드는 다음과 같습니다.



private void button1_Click(object sender, RoutedEventArgs e)
{
    string str = this.textBox1.Text;          // 1
    Uri u = new Uri(str);                       // 2
    this.webBrowser1.Navigate(u);       // 3
}



이젠 잔머리가 생겨서 1, 2, 3 주석 번호대로 설명을 하겠습니다.

1. string 형 str 변수를 만들고 현재 textBox1의 Text에 든 값을 할당한다.

2. Uri 객체를 str 변수데이터를 생성자의 인자로 하는 동적 인스턴스 객체 u를 만든다.

3. webBrowser1.Navigate에 u를 인자로 하는 값을 호출한다(그러면 페이지가 보입니다)


객체, 인스턴스, 인자 헷갈리는 단어들은 그냥 무시하셔도 될 겁니다.

OOP를 공부하게 되면 객체니 인스턴스니 객체의 인스턴스니 뭐니 하는 건 지겹게 보시겠습니다만

그런 깊이를 가질 상황은 아직은 아니니까요

저도 처음엔 칼같이 사용해왔으나 지금은 혼용되거나 중의적으로 쓰고 있는 게 많기도 하고…

디버그 해봅시다


뭐.. 볼 거 없이 잘 되겠지만.. 후후 으하하하하!

 


잘 되죠? 본인이 원하는 사이트로 주소를 바꿔서도 해보세요. 잘 될 겁니다.

절 믿으세요 ~_~. 설명은 잘 못해도 이런 삽질을 좀 단순한 건 잘합니다!


다음 포스트에는 다시 무엇을 할 지 고민해 보아야겠습니다.

물론 모든 IDE를 가진 언어의 목차 라는 게 있는데 일반적으로 컨트롤 다음에는 GDI인데

이 녀석은 컨트롤에 GDI개체들이 있네요 -ㅅ-. 거기다 좀 찾아봤더니 GDI개체들에 효과 주는 툴도 MS에서 내 놓았고…

그래서 좀 도움이 되는 걸 찾아보려고 합니다

찰즈 페졸드 아저씨의 관련 책(PDF가 있더군요)과, 샘플코드 위주로 찾아보고 포스팅 해야겠습니다.

그게 서로 서로 도움이 될 거 같기도 하구요 ~_~

그럼 슷하2 나 잠시 하고 자야겠습니다.

반응형

'.NET > Win Phone 7' 카테고리의 다른 글

Windows Phone 7 SDK - Media Player 2  (0) 2010.11.05
Windows Phone 7 SDK - Media Player 1  (0) 2010.11.03
Windows Phone 7 SDK - Text 와 Button  (0) 2010.10.27
Windows Phone 7 SDK - Hello World  (0) 2010.10.26
Windows Phone 7 SDK - 설치  (0) 2010.10.25
반응형


밤새 건조한 방에서 잤더니 코가 건조해서 쌍 코피가 날 기세로 잠을 설쳤더니

오늘은 좀 피곤하네요. 그래서 간략하게 두 지만 해볼까 합니다.

- Text 관련 컨트롤

- Button 컨트롤

두 가지를 컨트롤을 한번에 해보도록 하죠.

 

백문이 불여일코딩 (百闻 不如一Coding) ! 따라쟁이가 되어봅시다.

 




Windows Phone Application 템플릿으로 이런 프로젝트를 만들겠습니다.

 

그럼 이런 페이지가 열리게 되죠



그럼 좌측 상단 Toolbox에서 다음 컨트롤을 드래그하여 디자이너로 옮겨봅시다.

Toolbox를 고정으로 제어하는건 스스로 하세요(핀셋 아이콘 낄낄)

 


총 세가지 컨트롤을 드래그하여 옮겼습니다.

첫 번째는 TextBlock, 두 번째는 TextBox, 세 번째는 Button 컨트롤입니다.

 

간략한 사용 예를 보기 위하여 우리는

TextBox 에 입력한 값을 Button을 누르면 TextBlock에 적용되도록 하는 프로그램을 만들어 봅시다.

 

[기본상식]

우리가 디자이너에 올린 Button은 디자이너모드 Propertie를 보면 button1이라는 이름이 붙어있습니다.

 

Properties 뷰를 통하여 우리는 해당 컨트롤(객체)에 사용되는 속성들(바인딩 데이터, 스타일 등)을 조절하게 되며

Properties 와 따라다니는 Events 탭을 통하여 이벤트 핸들러에서 사용할 메서드를 정의 할 수 있습니다.

 

TextBox, TextBlock도 Properties가 있으니 한번 훑어 보세요.

 

 

 

디자이너에서 Button 컨트롤 객체를 더블클릭 합니다.

그럼 .NET 개발하시던 분들은 낯익은 그 모습,

네 맞습니다 비하인드 코드로의 C#파일 내부가 보이게 됩니다.(그냥 F7을 누르면 보이기도 합니다)

 

다음과 같은 모습이지요.



저 아래 음영처리 된 부분이 button 컨트롤의 클릭 이벤트 시 동작하는 메서드가 되겠습니다.

 

다음과 같이 메서드를 수정합니다.

 

[시술 전]

private void button1_Click(object sender, RoutedEventArgs e)
{
                   
}


[시술 후]

private void button1_Click(object sender, RoutedEventArgs e)
{
    this.textBlock1.Text = this.textBox1.Text;
}


단 한 줄 추가 되었습니다.

C# 문법을 아시거나 대충 객체를 정의 하여 사용하는 언어를 사용해 보신 분들은 알만한 쉬운 문법이죠.

 

this.textBlock1.Text = this.textBox1.Text;

현재 객체 속의 textBlock1 객체의 Text 라는 속성(Propertie)에

현재 객체 속의 textBox1 객체의 Text 라는 속성을 할당하라.

 

여담이지만 TextBox 와 TextBlock 의 Text라는 속성의 자료 형은 string으로 동일합니다.

따라서 화면의 버튼을 누르게 되면 Textbox에 입력한(디버깅을 하셔서 TextBox 텍스트를 지우고 새 값을 입력하신 후)

값이 TextBlock으로 써지는 것을 확인 하실 수 있을 겁니다.

 

또는 F5를 눌러 디버깅화면으로 넘어 가 봅시다.

 

 


위의 순서로(중간에 페이지 하나 더 있는데 너무 빨리 지나가 캡쳐가 안되네요) 프로그램을 확인할 수 있고

프로그램 테스트를 해 봅시다.

 

 

자 우리가 원했던 대로 프로그램이 동작하네요.

어때요 참 쉽죠?



ps. toolbox에 있는 여러가지 컨트롤들로 연습해 보시길 바랍니다.
다음 포스트 에서는 WebBrowser 컨트롤 하나 하고 컨트롤은 그냥 넘기고 싶네요.




반응형

'.NET > Win Phone 7' 카테고리의 다른 글

Windows Phone 7 SDK - Media Player 1  (0) 2010.11.03
Windows Phone 7 SDK - WebBrowser 컨트롤  (0) 2010.11.02
Windows Phone 7 SDK - Hello World  (0) 2010.10.26
Windows Phone 7 SDK - 설치  (0) 2010.10.25
Windows 7 Phone SDK  (0) 2010.10.18
반응형

Windows Phone 7 SDK 사용을 해봅시다

오늘 해볼 것은 모든 랭귀지의 기본 Hello World !!!

그럼 Windows Phone 7  SDK용 개발 툴 Microsoft™ Visual Studio® 2010 Express for Windows Phone를 실행하시고



조금 눈썰미가 있으신 분들은 다 눈치 챘을 듯. 우리는 차려진 밥상에 밥 & 반찬만 떠먹기만 하면 되는 시츄에이숀!

내가 초보고 시간이 많이 남는다면 우측의 최 상단

Getting Startd with Microsoft Visual Studyo 2010 Express for Windows Phone …

어느 정도 문법에 익숙해졌다 싶은데 아직 어떻게 짜야 잘 짰다고 소문이 날지 몰라 남의 코드를 보고 싶다면  우측 중간

Get Windows Phone 7 Code Samples and More …

나는 내가 짠 프로그램을 한번 배포 해보고 싶다면 우측 젤 아래 있는

Publish Your App and Game …

을 한번 보고 하시는 것도 나쁘지 않겠습니다.



하지만 우리는 귀차니즘 속에 살고 있죠.

그래서 차려진 밥상에 밥과 반찬을 떠 먹는 것 마져 귀찮죠.

그래서 하나씩 씹어서 먹여 드리겠습니다.

실은 제가 공부하기 위해서 차려진 밥과 반찬을 씹는 겁니다.  다 씹고 안 줄 겁니다. 이 컨텐츠는 재 배포 금지거든요.

 

자 그럼 하나씩 해보도록 하죠.

새로운 프로젝트 만들기 (New Project)

좌측 상단에 이 개발 툴의 명칭 아래 보시면 3가지 항목이 보입니다.

* New Project (새로운 프로젝트)

* Open Project (프로젝트 열기)

* Recent Projects ---------- (최근 프로젝트)

    blah.. blah..

프로젝트(Project)는 Microsoft 개발 툴에서 다루는 단위로 최소의 구성 가능한 프로그램 단위가 됩니다.

그 프로젝트들이 모여서 솔루션Solution이 되지요(VS.NET 사용 해 보신 분들은 쉽게 이해하리라 믿습니다.)

당연히 프로젝트 단위 이상은 배포도 가능하죠. 방법이야 각각 다르거나 차이가 날 뿐이지… (뭐 이건 논외)

New Project를 클릭해보십시다. 씽~ 나네요 고고싱

 

MS의 IDE들 어느 하나 빠짐없이 이 모양 이죠잉~

개발하기 위한 템플릿입니다.

어렵게 이야기하지도 복잡하게 설명하지도 않습니다. 그리고 어렵게 알고 있어봐야 면접 볼 때만 도움이 될 뿐.


템플릿이란 그냥 뼈대라고 생각하시면 됩니다.

C++의 그 템플릿과도 비슷하다 보셔도 되고, VS나 VS.NET에서 팀 개발환경에서의 템플릿 그 녀석입니다.

한번도 겪어보신 적 없으시면 Pass! 나중 팀 프로젝트를 하다 보면 쉽게 가르쳐드리고 필요하면 배우게 됩니다.

우리가 원하는 템플릿을 선택하면 됩니다.

Installed Templates

네 맞습니다. 기본으로 설치된 템플릿을 고를 수 있습니다.

Visual C# 이하 항목으로 존재하죠? 아마 비하인드 코드나 개발언어를 C#으로 하나 봅니다.

(저는 이미 봤으니 이런 가치도 없는 말을 내 뱉는거시져~)

오호라 XNA Game Studio 4.0 템플릿도 있군요. XBOX게임도 만들 수 있겠근영.

일단 우리가 원하는 것부터 이루도록 합시다.

우리의 목적은 Hello World

그럼 가장 기본적인 개발 형 템플릿을 열어야겠습니다.

Win32, Windows.NET IDE에서 가장 기본은?  네 맞습니다 Win32(Window.NET) Console Application 이죠

그럼 Window Phone SDK에서 가장 기본은? 네 위에 있는 녀석 Windows Phone Application 입니다.


Windows Phone Application을 선택한 후에 아래를 보세요.

Name: 프로젝트 명 을 지정할 수 있습니다.

Location: 해당 프로젝트가 저장 될 PATH를 선택할 수 있습니다. Browse..버튼으로 찾아서 지정 할 수도 있네요.

Solution name: 해당 프로젝트를 솔루션으로 감싸게 됩니다. 그 명명을 하라는 것이죠. Create directory for solution 이 기본 체크가 되어있습니다. 따라서 모든 프로젝트는 같은 명칭의 솔루션 폴더 안에 존재하게 되겠죠? 그렇습니다 뭐 흠흠..

아래를 따라 해보세요~  쉽게 쉽게 가봅시다.


그리고 OK 고고고 ~

 

 

이런 화면으로 바뀌게 되네요

 

 

아마 ASP.NET 개발 해보신 분들은 자주 보던 토 쏠리는 화면이 되겠습니다.

웹폼(WebForm) 디자이너 모드 !!! .NET 이하 다른 개발IDE모드에서 가지는 윈폼(WinForm) 디자이너모드와도 같습니다.

SDE(Smart Device Environment – PPC, Windows mobile  프로그램 개발용)의 모습과도 비슷합니다.

네 맞습니다. 제가 찾아본 결과 ASP.NET의 웹폼 디자이너에 더 흡사하다 라고 볼 수 있더군요.

각 구성부위 설명을 드릴께요

메뉴 바 와 도구상자

말해봐야 목만 아프죠. 네 그 녀석들..음흠흠

 



Toolbox

툴 박스는 사용할 수 있는 컨트롤 등을 모아두어 폼 디자이너에서 쉽게 사용 할 수 있도록 하기 위함입니다.

드래그 하여 임요환 선수처럼 폼에 멋있게 드랍 하셔서 사용하시기 바랍니다.

 



Document Outline

이게 무엇일까? 계속 생각하고 장난을 쳐봤는데. 그냥 디자이너가 생성한 코드가 XML식의 문법구조라(정식명칭은 XAML입니다)  다루기 쉽게 트리구조(하이라키)로 만들어놓은 뷰 같네요.

해당 엘러먼트를 클릭하면 우측 XAML코드에 커서가 이동합니다.

 



Data Source

아직 볼 일은 없습니다. 분명 Data Source Binding 이 되겠죠? 하지만 우리는 Hello World 를 찍으러 온 것 !

 



Design (디자이너)

말 그대로 폼 디자이너 입니다. 툴 박스에 있는 컨트롤을 여기다 담아서 원하는 구성을 할 수 있다죠?

 



XAML

최초 템플릿에 따라 디자이너의 폼의 형태와 동기화 되는 실질적인 코드 부위 입니다.

ASP.NET aspx 파일이라 생각하시면 됩니다.

 



솔루션 탐색기

솔루션에 필요한 프로젝트와 그와 관계된 파일들이 보여지게 됩니다. VS.NET의 파일탐색기를 찾을 수가 없군요 똥망~

 



나머지 부분들

은 그냥 버리죠 대부분이 보여지기 위한 부수적인 부분일 테니까(물론 디버깅 관련도 있습니다)




잡설
은 버리고
바로  Hello World 를 찍어보도록 하죠


“Hello World !!!”

 

[목표]

1. “MY APPLICATION” 을 “Window 7 Phone TEST!” 로 변경

2. “page name” 을 “헬로우 월드!” 으로 변경

3. 공란에 “Hello World” 쓰기

 

 

자 그럼 해봅시다.

 

 

위 그림을 보시면 아시겠지만 실제 폼을 보게 되면 LayoutRoot 라는 투명한 Grid로 쌓여 있습니다.

MY APPLLICATION과 page name 은 TitlePanel 이라고 하는 StackPanel이 감싸고 있죠.

 

 

그리고 마지막 아래 공란은 ContentPAnel 이라고 하는 Grid로 구성되어있습니다.

그럼 [목표] 1, 2 는 쉽게 가능하겠습니다.

 

 

<!--TitlePanel contains the name of the application and page title-->

<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">

    <TextBlock x:Name="ApplicationTitle" Text="Windows 7 Phone TEST!" Style="{StaticResource PhoneTextNormalStyle}"/>

    <TextBlock x:Name="PageTitle" Text="헬로우 월드!" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>

</StackPanel>

네 한글 잘됩니다.

[목표] 3을 해보실까요?

 

<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"></Grid>

를 수정하겠습니다.

 

<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
  
<TextBlock Height="50" HorizontalAlignment="Left" Margin="25,21,0,0" Name="textBlock1" Text="Hello World" VerticalAlignment="Top" Width="409" FontSize="26" />
</Grid>


이렇게 수정된 화면입니다.

 

 

어때요? 참 쉽죠?

F5 또는

재생 버튼을 누르면 디버깅 모드로 진입하게 되며 우리가 만든 프로그램을 에뮬레이터로 확인 가능합니다.

이렇게~



다음 포스트에선 툴 박스의 컨트롤 사용법을 함께 익혀봅시다.









이러는 와중에 우리 베이브는 이렇게 개처럼 자고 있네요.

딴 집 고양이는 다소곳하게  자드만!!! 왜 개같이 대충 누워서 자는걸까?

 

 

 

시체가 아닙니다 –0- 살아있는 고양이의 퍼질러 자는 모 to the 습 !!!

반응형

'.NET > Win Phone 7' 카테고리의 다른 글

Windows Phone 7 SDK - Media Player 1  (0) 2010.11.03
Windows Phone 7 SDK - WebBrowser 컨트롤  (0) 2010.11.02
Windows Phone 7 SDK - Text 와 Button  (0) 2010.10.27
Windows Phone 7 SDK - 설치  (0) 2010.10.25
Windows 7 Phone SDK  (0) 2010.10.18
반응형

1. 설치 다운로드 패키지 프로그램 다운로드

http://go.microsoft.com/?linkid=9713250

 

2. 설치

설치에 앞서 간략하게 말씀 드리자면 Windows 7이나 Windows Vista 이상에만 가능합니다.

저는 Windows 7 Retail 64bit 입니다.

라이선스 동의하시고

 

Install Now 클릭

 

다운로드 고고씽~ 씽 나는 군요

 

다운로드가 끝이나면 이렇게 설치 프로그래스가 돕니다.

이것도 씽 나네요~

 

설치 완료메시지 전에 재 시작 하시라고 하니 시키는 데로 해봅시다

 

설치완료 메시지 및 프로그램 실행 다이얼로그가 뜹니다.

Run the Product Now 하셔도 되지만 일단 Exit로 설치프로그램 종료를 해주세요

 

3. 실행

설치 후 실행 말고 바로 이것을 클릭하시면 실행이 됩니다.

 

실행 하게 되면 등록 키 발급여부를 물어봅니다

Optaion a registration key online 을 클릭하여  관련사이트로 이동

 

Windows Live Passport (일명 윈도우즈 라이브 메신저 ID)가 있다면 우측을 통해서 로그인

없다면 좌측을 통해서 가입을 하십니다.

일단 저는 일반적인 유저이므로 Windows Live ID가 있으므로 우측으로 로긴합니다

 

등록 키를 발급받기 위해서 필요사항 (* 표 친 것들) 입력을 하시고 submit 하시면

 

이렇게 등록완료 후 등록 키를 발급받게 됩니다.

 

그럼 등록 키를 입력하고 들어가야겠죠?

등록 키를  입력 후 Register Now!!

 
































그럼 이렇게 프로그램이 열리게 됩니다

 

여기까지가 Window 7 Phone SDK 설치 과정이며

 

우리가 동작시킨 프로그램의 정식명칭은 다음과 같군요

Microsoft™ Visual Studio® 2010 Express for Windows Phone

 

Express는 맛보기 용도니까 분명 정식 프로덕트로 나왔다거나 Visual Studio™ 2010 이상 버전에서는 Addin으로 동작할 수 있게 프로덕트가 나오거나 이후에 포함될 것  같네요

다음 포스트에선 함께 Hello Windows 7 Phone을 외쳐봅시다 ~
오늘은 잠좀 자고 ..

반응형

'.NET > Win Phone 7' 카테고리의 다른 글

Windows Phone 7 SDK - Media Player 1  (0) 2010.11.03
Windows Phone 7 SDK - WebBrowser 컨트롤  (0) 2010.11.02
Windows Phone 7 SDK - Text 와 Button  (0) 2010.10.27
Windows Phone 7 SDK - Hello World  (0) 2010.10.26
Windows 7 Phone SDK  (0) 2010.10.18
반응형

http://choiwonwoo.egloos.com/669096

옜날 C#할때 모 책에서 본거 같은데 흠...올라와잇길래 펌

C#으로 작성된 소스이며, VS.NET에서는 기본적으로 암호화 함수를 지원하고 있습니다. 아래 코드는 이 암호화함수들을 사용하는 셈플이지요.

using System;
using System.Security;
using System.Security.Cryptography;
using System.Text;
using System.IO;

namespace Utility
{
/// <summary>
/// Crypt에 대한 요약 설명입니다.
/// </summary>
public class Crypt
{
// 암호화 키
private const string desKey="......";

public Crypt()
{
  //
  // TODO: 여기에 생성자 논리를 추가합니다.
  //
}

//------------------------------------------------------------------------
#region MD5 Hash

public static string MD5HashCrypt(string val)
{
  byte[] data = Convert.FromBase64String(val);
  // This is one implementation of the abstract class MD5.
  MD5 md5 = new MD5CryptoServiceProvider();
  byte[] result = md5.ComputeHash(data);

  return Convert.ToBase64String(result);
}

#endregion //MD5 Hash

//------------------------------------------------------------------------
#region DES암복호화

// Public Function
public static string DESEncrypt(string inStr)
{  
  return DesEncrypt(inStr,desKey);
}

//문자열 암호화
private static string DesEncrypt(string str,string key)
{
  //키 유효성 검사
  byte[] btKey = ConvertStringToByteArrayA(key);

  //키가 8Byte가 아니면 예외발생
  if(btKey.Length!=8)
  {
   throw (new Exception("Invalid key. Key length must be 8 byte."));
  }

  //소스 문자열
  byte[] btSrc = ConvertStringToByteArray(str);
  DESCryptoServiceProvider des = new DESCryptoServiceProvider();
          
  des.Key = btKey;
  des.IV = btKey;

  ICryptoTransform desencrypt = des.CreateEncryptor();

  MemoryStream ms = new MemoryStream();

  CryptoStream cs = new CryptoStream(ms, desencrypt,
   CryptoStreamMode.Write);

  cs.Write(btSrc, 0, btSrc.Length);
  cs.FlushFinalBlock();


  byte[] btEncData = ms.ToArray();

  return (ConvertByteArrayToStringB(btEncData));        
}//end of func DesEncrypt

// Public Function
public static string DESDecrypt(string inStr) // 복호화
{
  return DesDecrypt(inStr,desKey);
}

//문자열 복호화
private static string DesDecrypt(string str,string key)
{
  //키 유효성 검사
  byte[] btKey = ConvertStringToByteArrayA(key);

  //키가 8Byte가 아니면 예외발생
  if(btKey.Length!=8)
  {
   throw (new Exception("Invalid key. Key length must be 8 byte."));
  }


  byte[] btEncData = ConvertStringToByteArrayB(str);
  DESCryptoServiceProvider des = new DESCryptoServiceProvider();
          
  des.Key = btKey;
  des.IV = btKey;

  ICryptoTransform desdecrypt = des.CreateDecryptor();

  MemoryStream ms = new MemoryStream();

  CryptoStream cs = new CryptoStream(ms, desdecrypt,
   CryptoStreamMode.Write);

  cs.Write(btEncData, 0, btEncData.Length);

  cs.FlushFinalBlock();

  byte[] btSrc = ms.ToArray();


  return (ConvertByteArrayToString(btSrc));
  
}//end of func DesDecrypt

//문자열->유니코드 바이트 배열
private static Byte[] ConvertStringToByteArray(String s)
{
  return (new UnicodeEncoding()).GetBytes(s);
}

//유니코드 바이트 배열->문자열
private static string ConvertByteArrayToString(byte[] b)
{
  return (new UnicodeEncoding()).GetString(b, 0, b.Length);
}

//문자열->안시 바이트 배열
private static Byte[] ConvertStringToByteArrayA(String s)
{
  return (new ASCIIEncoding()).GetBytes(s);
}

//안시 바이트 배열->문자열
private static string ConvertByteArrayToStringA(byte[] b)
{
  return (new ASCIIEncoding()).GetString(b, 0, b.Length);
}

//문자열->Base64 바이트 배열
private static Byte[] ConvertStringToByteArrayB(String s)
{
  return Convert.FromBase64String(s);
}

//Base64 바이트 배열->문자열
private static string ConvertByteArrayToStringB(byte[] b)
{
  return Convert.ToBase64String(b);
}

#endregion //DES암복호화

//------------------------------------------------------------------------
#region RSA암복호화
//RSA 암호화
public static string RSAEncrypt(string sValue,string sPubKey)
{
  //공개키 생성
  byte [] keybuf = Convert.FromBase64String(sPubKey);
  sPubKey =  (new UTF8Encoding()).GetString(keybuf);
  System.Security.Cryptography.RSACryptoServiceProvider oEnc = new RSACryptoServiceProvider(); //암호화


  oEnc.FromXmlString(sPubKey);

  //암호화할 문자열을 UFT8인코딩
  byte [] inbuf = (new UTF8Encoding()).GetBytes(sValue);
  //암호화
  byte [] encbuf = oEnc.Encrypt(inbuf, false);
  
  //암호화된 문자열 Base64인코딩
  return Convert.ToBase64String(encbuf);
}
//RSA 복호화
public static string RSADecrypt(string sValue,string sPrvKey)
{
  //개인키 생성
  byte [] inbuf = Convert.FromBase64String(sPrvKey);
  sPrvKey =  (new UTF8Encoding()).GetString(inbuf);

  //RSA객체생성
  System.Security.Cryptography.RSACryptoServiceProvider oDec = new RSACryptoServiceProvider(); //복호화
  //개인키로 활성화
  oDec.FromXmlString(sPrvKey);

  //sValue문자열을 바이트배열로 변환
  byte [] srcbuf = Convert.FromBase64String(sValue);

  //바이트배열 복호화
  byte [] decbuf = oDec.Decrypt(srcbuf, false);

  //복호화 바이트배열을 문자열로 변환
  string sDec = (new UTF8Encoding()).GetString(decbuf,0,decbuf.Length);
  return sDec;
}

#endregion

}
}

반응형

'.NET > VS.NET' 카테고리의 다른 글

MVC5 Database.Open 사용법  (0) 2019.07.15
IIS MVC4 활성화  (0) 2019.07.15
[VC++] Othello 소스  (0) 2010.10.21
C# Error Collections [C#관련 팁들]  (0) 2010.10.21
C# 에서 RichTextBox의 MaxLength  (0) 2010.10.21
반응형


VS98로 만듬
반응형

'.NET > VS.NET' 카테고리의 다른 글

MVC5 Database.Open 사용법  (0) 2019.07.15
IIS MVC4 활성화  (0) 2019.07.15
[C#] 문자열 암호화 - RSA, MD5, DES  (0) 2010.10.21
C# Error Collections [C#관련 팁들]  (0) 2010.10.21
C# 에서 RichTextBox의 MaxLength  (0) 2010.10.21
반응형

객체(클래스, 구조체) 등을 배열로 선언하기

--------------------------------------------------------------------------------

Q : Ftpproc[] ftc = new Ftpproc(this);  이건 형식이 다르다고 안되구
A :
음, 소스의 내용은 잘 이해가 안 가는데요,..  
어쨌거나,  원하시는게 아래와 같은게 아닌지 ???
Ftpproc[] ftc = new Ftpproc[3];

ftc[0] = new Ftpproc(this);
ftc[1] = new Ftpproc(this);
ftc[2] = new Ftpproc(this);

c#의 문법적인 부분이긴 합니다만....  ..  .


--------------------------------------------------------------------------------

struct 선언법
--------------------------------------------------------------------------------

using System;
namespace SoonERP.soon   {
        public struct pnode
        {
                public string memid;
                public string memname;
                public string upnmemid;
                public string jumin;
                public string telno;
                public bool marked;
        }
         public class main  
         {
                  pnode node = new pnode();
                  //.....
         }

}
--------------------------------------------------------------------------------

솔루션 내에 다른 프로젝트의 Form 끼리 데이터 공유!
--------------------------------------------------------------------------------

Q: 자바를 배울 때 주로 static을 사용해서 데이타를 주고 받았었는데.....
객체지향적 프로그래밍에 어긋나는 것 같고...또 static이 많으니까.... 코드가 깔끔하지가 않아서요...
전에 얼핏 듣기로 static 말고 쉽고 간편한 방법이 있다고 하던데......설명 좀 부탁드립니다..
참 명시적으로 다른 폼의 인스턴스를 생성시키지 않고 하는 방법이 있나 해서요...
예를 들어..
Form1에서 public string form1_Variable; 이라고 선언하고...
Form2에서 Form1 f1 = new Form1(); .........f1.form1_Variable = .......요런거 말구요....
있긴 있다던데.....제가 워낙 얕게 배워서요...기럼 부탁 좀 드리겠습니다.


--------------------------------------------------------------------------------

A: 일단 위에 답변 글을 남긴 님의 방식대로 하면 아마두 안될것 같은데...
그 님은 Form1이라는 객체를 Form2에서 새로 생성을 하죠..
그러면 원래 Form1에 텍스트 박스에 있는 내용은 있지만..
새로 Form1이라는 것을 생성하기 때문에 원래 있던 정보는 아마두 접근 할수 없을건데...
제가 잘못 알수도 있구요...
그리구 public으로 변경하는 것은 그다지 좋지 못한 방법입니다...
객체 지향의 특징중의 하나인 캡슐화에 위배되죠...
그럼 제가 하는 방식은요...
만약 폼 A, 폼 B가 있다고 치죠...
님 말씀대로 폼 A에 있는 텍스트 박스가 하나 있구..
폼 B에 텍스트 박스가 있구 버튼이 있다구 치죠...
일단 폼 B가 폼 A를 현 상태에서는 알수가 없죠...
그러니 폼 B가 폼 A라는 객체를 참조해야 폼 B가 폼 A에 무엇이 있다는것을 알수가 있죠...
저는 간단히 하기 위해서 일단 폼A가 메인폼으로 뜰떄 폼B를 생성해서 바로 show시키겠습니다...
그럼 일단 메인폼인 A라는 폼의 Main()부분에
static void Main()
{
    Form1 f = new Form1();
    Application.Run(f);
}
똑같은 표현이죠...
이렇게 해두시구 Form_Load이벤트에...
private void Form1_Load(object sender, System.EventArgs e)
{
    Form2 f = new Form2(this);
   f.Show();
}
이렇게 하시구요...
폼 B에서 폼 A의 텍스트 박스에 접근할수 있도록 Property를 하나 만들겠습니다..
public 메소드를 만들어주셔두 되구요...
public string GetTextBox
{
    get { return this.textBox1.Text; }
}
지금까지 폼 A에서 작업을 했구요.. 폼 B에서는 일단 Form1이라는 폼 A를 선언하구 생성자부분에..
private Form1 f;
...
...
public Form2(Form1 f)
{
    this.f = f;
    InitializeComponent();
}
이렇게 하시구요...
이제 버튼을 눌렀을때의 이벤트 처리...
private void button1_Click(object sender, System.EventArgs e)
{
    this.textBox1.Text = f.GetTextBox;
}
이렇게 하시면 될겁니다...
이해가 가시죠 *^^*
그럼 즐프~~~


--------------------------------------------------------------------------------

포인터 사용법
--------------------------------------------------------------------------------

클래스는 다른 방법을 찾아야 할 것 같네요... 일단 구조체를 사용했습니다.
using System;
struct A
{
     public int a;
}
class MyMain
{
     unsafe static void Main(string[] args)
     {
         A a=new A();

         A* pa = &a;
         (*pa).a = 11;

         void* vo = &pa;
         int pi = (int)vo;
        
         Console.WriteLine(pi);            
     }
}


--------------------------------------------------------------------------------

포인터사용법 2
--------------------------------------------------------------------------------

  protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
     // Using pointers, so we must use the "unsafe" keyword.
             unsafe
     {
         // This data defines the top-down bitmap.
         byte[] ptrTopDown =  
          {255,255,255,255,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,
                   255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
          255,255,255,255,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,
          255,255,255,255,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  };


          // This data defines the same bitmap, only with bottom-up data.  
          byte[] ptrBottomUp =  
         {255,255,255,255,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,
         255,255,255,255,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,
                   255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
         255,255,255,255,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  ,0  };


         int xStart = 0;
         int yStart = 0;
         int width = 4;
         int height = 4;
         int bytesPerPixel = 4;
         int scanlineWidth = bytesPerPixel * width;


         // We must obtain a pointer to the first scanline of the top-down data.
         // This happens to be the start of the buffer.
         fixed (void* p = ptrTopDown)
         {
             IntPtr ptr = new IntPtr(p);

             PixelFormat format = PixelFormat.Format32bppRgb;
             Bitmap bitmapImage = new Bitmap(width,height,scanlineWidth,format,ptr);
                    
             Rectangle destRect1 = new Rectangle(0, 0, width, height);
             GraphicsUnit units = GraphicsUnit.Pixel;
             e.Graphics.DrawImage(bitmapImage, destRect1, xStart, yStart, width, height, units);
         }
         //Because this is bottom-up bitmap data, we must obtain a pointer to
         //the beginning of the last row of pixels in the buffer, which is the topmost scanline
         //seen when the image is drawn.
         int desiredRow = 3;  
         // Zero-based desired row. We want the fourth
         // row from the top, because that is the start of the
         // last row of pixels in the buffer.
        fixed (void* p = &ptrBottomUpdesiredRow * scanlineWidth)
         {
             IntPtr ptr = new IntPtr(p);

             PixelFormat format = PixelFormat.Format32bppRgb;
             Bitmap bitmapImage = new Bitmap(width,height,-scanlineWidth,format,ptr);
                    
             Rectangle destRect1 = new Rectangle(10, 0, width, height);
             GraphicsUnit units = GraphicsUnit.Pixel;
             e.Graphics.DrawImage(bitmapImage, destRect1, xStart, yStart, width, height, units);
         }
     }
}
동적으로 이미지를 생성해서 화면에 뿌리는 예제입니다.
지금 하신 코드에 적절하게.. 바꿔서 넣어주시면 될것 같네요 ^^;--------------------------------------------------------------------------------

unsafe image processing
--------------------------------------------------------------------------------
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp11152001.asp
--------------------------------------------------------------------------------



--------------------------------------------------------------------------------

C#에서 UDP통신에서 바이너리 데이터 전송은 직렬화(Serialize)를 사용해야 한다.

--------------------------------------------------------------------------------

안녕하세요 네트웍 프로그램을 만들고 있는데
프로토콜 객체를 직렬화한후 이를 바이트 배열로 전송하여 상대
에서 다시 비직렬화 하여 구성하는 중 자꾸 에러가 발생합니다.
"End of Stream encountered before parsing was completed." 에러의 내용은 다음과 같이 나오며
코드는 다음과 같습니다.
// 메모리 스트림 생성.
MemoryStream    stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
// 직렬화 수행.
formatter.Serialize(stream, this.mGCSP);
byte[] buf = new Byte[stream.Length];
// 메모리 스트림의 오프셋 설정
stream.Position =0;            
stream.Read(buf, 0, buf.Length);            
// 소켓으로 전송 부분.
this.mSocket.Send(buf, 0, buf.Length, SocketFlags.None);
...
...
// 이 데이터를 다시 역직렬화 하는 부분,
stream.Position =0;
stream.Write(buf, 0, buf.Length);
// 여기서 에러 발생!.
GCSP gcsp = (GCSP)formatter.Deserialize(stream);
혹시 이런 문제점에 대해서 잘 아시는 분은 답변부탁 드립니다.
그럼 좋은 하루 보내세요

위와 같이 직렬화 하면 됨...해결하고 수정해 놓은 소스...


--------------------------------------------------------------------------------

C# WinForm에서의 다른 컨트롤에 의한 스크롤...(걍 스크롤)
--------------------------------------------------------------------------------

안녕하세요!
일반적으로 이 클래스는 직접 사용하지 않습니다. ContainerControl 및 Panel 클래스는 이 클래스에서 상속됩니다.
ScrollableControl 클래스는 스크롤 기능이 필요한 컨트롤에 대한 기본 클래스 역할을 수행합니다. 필요할 때 컨트롤에서 스크롤 막대 를 표시하도록 하려면 AutoScroll 속성을 true로 설정하고 AutoScrollMinSize 속성을 원하는 크기로 설정합니다. 컨트롤이 지정한 최소 크기보다 작게 조정되거나 자식 컨트롤이 컨트롤의 범위 밖에 있으면 해당 스크롤 막대가 표시됩니다.
표시되는 스크롤 막대를 수동으로 재정의하려면 VScroll 및 HScroll 속성을 설정합니다. 두 가지 속성 중 하나가 false로 설정되어 있으면 AutoScroll 속성이 true로 설정되어 있어도 해당 스크롤 막대가 표시되지 않습니다.
가장 대표적인 컨트롤로 Panel 컨트롤을 들수 있습니다.
Panel은 다른 컨트롤을 포함하는 컨트롤입니다. Panel을 사용하면 컨트롤의 컬렉션을 RadioButton 컨트롤 그룹과 같이 그룹화할 수 있습니다. GroupBox 컨트롤 등의 다른 Container 컨트롤과 같이 Panel 컨트롤의 Enabled 속성이 false로 설정되어 있으면 Panel에 포함된 컨트롤도 사용할 수 없게 됩니다.
기본적으로 Panel 컨트롤은 테두리 없이 표시됩니다. BorderStyle 속성을 사용하여 표준 또는 3차원 테두리를 제공하면 패널 영역을 폼의 다른 영역과 구별할 수 있습니다. Panel 컨트롤은 ScrollableControl 클래스에서 파생되므로 AutoScroll 속성을 사용하면 Panel 컨트롤에서 스크롤 막대를 활성화할 수 있습니다. AutoScroll 속성이 true로 설정되어 있으면 제공된 스크롤 막대를 사용하여 볼 수 있는 영역 외부에서 Panel 안의 모든 컨트롤을 스크롤할 수 있습니다.
도움이 되셨는지 모르겠습니다.



--------------------------------------------------------------------------------

웹브라우저 컨트롤(Microsoft 웹브라우저/ActiveX)
--------------------------------------------------------------------------------

private AxSHDocVw.AxWebBrowser axWebBrowser1;
private System.ComponentModel.Container components = null;
public Form1()
{
InitializeComponent();
object a = 0;
object b = 0;
object c = 0;
object d = 0;
this.axWebBrowser1.Navigate("www.google.com",ref a,ref b,ref c,ref d);
}



--------------------------------------------------------------------------------

mp3재생
--------------------------------------------------------------------------------

using QuartzTypeLib;
을 하시구요.

IMediaControl m_IMediaControl;                        
m_IMediaControl = new FilgraphManager();
        
m_IMediaControl.RenderFile("C:\Test.mp3");
            
m_IMediaControl.Run();

이렇게 하시면 음악이 흘러 나옵니다.



--------------------------------------------------------------------------------

x버튼 눌렀을때 처리
--------------------------------------------------------------------------------


폼에서 x(닫기)버튼을 클릭하던가 폼의 close()메서드를 실행하면
폼이 닫히게 되잖아여..
이때...폼의 closing()이벤트를 발생시키면여..
폼이 닫히는동안에 처리하는 코드를 넣을수 있어여...
여기서 폼이 닫히는 것을 취소하구여..
원하는 코드를 넣으면 되겠져...
Form의 ShowInTaskbar 속성 Visible속성을 조절하도록 말이져..
글구 트레이의 Visible을 트루로 하면 되겠져...


private void form_Closing(sender,e)
{
e.Cancel=true; //폼닫기 취소
this.Visible = false; //폼 안보이게...
this.ShowInTaskbar = false; //태스크바에서 안보이게..
this.tray.Visible = true; //트레이아이콘 보이게..
}


트레이에서 다시 폼을 보려면 트레이의 클릭이나 더블클릭이벤트에
적절한 코드를 넣으면 되겠져...



--------------------------------------------------------------------------------

PrintDialog
--------------------------------------------------------------------------------

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDrawingPrintingPrintPageEventArgsClassGraphicsTopic.asp

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cscon/html/vclrfcodeprintpreviewingformvisualc.asp


--------------------------------------------------------------------------------

특정영역 비트맵 복사
--------------------------------------------------------------------------------

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncfhowto/html/copybr.asp



--------------------------------------------------------------------------------

폼 닫기 버튼 무효화
--------------------------------------------------------------------------------

폼에서 x(닫기)버튼을 클릭하던가 폼의 close()메서드를 실행하면
폼이 닫히게 되잖아여..
이때...폼의 closing()이벤트를 발생시키면여..
폼이 닫히는동안에 처리하는 코드를 넣을수 있어여...
여기서 폼이 닫히는 것을 취소하구여..
원하는 코드를 넣으면 되겠져...
Form의 ShowInTaskbar 속성 Visible속성을 조절하도록 말이져..
글구 트레이의 Visible을 트루로 하면 되겠져...


private void form_Closing(sender,e)
{
e.Cancel=true;
this.Visible = false;
this.ShowInTaskbar = false;
this.tray.Visible = true;
}


트레이에서 다시 폼을 보려면 트레이의 클릭이나 더블클릭이벤트에
적절한 코드를 넣으면 되겠져...



--------------------------------------------------------------------------------

스레드 때문에 프로그램 종료가 안될때
--------------------------------------------------------------------------------
음,, 저하고 같은 고민을 하셨군요..
먼저 다음과 같이 한번 해보세요
using System.Diagnostics;
protected override void Dispose( bool disposing )
{
    if( disposing )
    {
        if(components != null)
        {
            components.Dispose();
        }
    }
    base.Dispose( disposing );


    // 이부분에 추가합니다.
    if( _thread.IsAlive )  // th = 생성한 쓰레드 객체
        _thread.Abort();
    Process [] p_arr = Process.GetProcessesByName("EReceiver"); // 즉 *.exe 로 생성될떄 exe 를 뺸 이름
        foreach( Process p in p_arr)
                p.Kill();
}
저는 이와같이 해서 해결했습니다. 도움이 되시길..



--------------------------------------------------------------------------------

asp와 asp.net의 쿠키의 차이점
--------------------------------------------------------------------------------

ASP의 경우 쿠키를 기록하고 읽을때 자동으로 UrlEncode와 UrlDecode를 수행합니다.
ASP.NET의 경우에는 쿠키를 그런 자동화된 처리를 하지 않지요~
그래서 한글 쿠키값의 경우에 어느 한쪽에서 기록한 정보를 다른쪽에서 읽으려 할때에 차이가 생기게 되는것입니다.
해결방법은 쿠키접근을 ASP.NET에서만 하시거나 ASP와 공유가 반드시 필요하다면
ASP.NET에서 쿠키값을 기록할때 UrlEncode 하시고, 읽을때 UrlDecode 하셔서 ASP방식에 맞춰줘야 할것 같습니다.
제가 알기로는 ASP에서 기본 Encode/Decode를 하지 않도록 설정하는 방법이 없는것으로 알고 있어서...
(혹시 그런 방법을 알고 계신분이 있으시면 한 수 가르쳐 주시길 바랍니다~ ^^;)
-아래 주소는 한국 마이크로소프트사의 해당부분 기술자료입니다.
http://support.microsoft.com/default.aspx?scid=kb;ko;313282
도움이 되셨길...



--------------------------------------------------------------------------------

사용자 정의 컨트롤(ascx) 사용하기
--------------------------------------------------------------------------------

<%@ Register Tagprefix="MAIN(태그프리픽스명)" TagName="bottom(태그명)" Src="/bottom.ascx(경로)"%>
(위에 src에 들어갈 파일확장자 명은 꼭 ascx이어야 합니다.)
aspx 파일 맨위에 위처럼 넣어주시고  
include할 곳에 담과 같은 태그를 넣어주시면 됩니다.
<MAIN:BOTTOM id="Bottom2" runat="server"></MAIN:BOTTOM>



--------------------------------------------------------------------------------

사용자 정의 컨트롤 동적으로 사용하기
--------------------------------------------------------------------------------

(1) UserControl BehindCode 에서 Visible 속성 사용하기
1. 원하는 위치에 UserControl을 여러개 배치한다.
2. ASPX Page에서 Visibe=False or True 속성 사용(Optional)
3. 컨트롤 선언(해당 UC가 속한 프로젝트의 DLL을 Reference.)
4. Protected UC_ID AS UC_TAGName(컨트롤을 선언한다.)
4. UC_ID.visible=false or True
전 이렇게 UC를 동적으로 표현하는데요... 다른분들은 어떻게 하시는지 모르겠네요..
동적으로 생성하는 건 아니지만, 단순히 Visible 속성만으로 원하는 UserControl을 보여주는 방법을 씁니다.


(1) 서버객체 이용하기
HTML에서
  
이렇게 테이블이 있고 저기 body라는 셀에다가
유저컨트롤을 로드 시키고 싶다고 합니다.
그럴경우..
cs에서
이렇게 먼저 body라는 테이블 셀을 선언하시고
protected System.Web.UI.HtmlControls.HtmlTableCell body;
body.Controls.Add(Page.LoadControl("경로+파일명"));
이렇게 LoadControl을 하게 되면 됩니다



--------------------------------------------------------------------------------

MDB사용 쿼리 시 ____
select ~ where (필드) like '%' 는
MDB(ACCESS)에서
select ~ where (필드) like '*' 는
가 되나
C#과 같은 쿼리 엔진이 있는 곳에서 쿼리를 날릴땐
select ~ where (필드) like '%' 그대로 사용한다.
참고 날짜는 '2002-10-10' --> #2002-10-10#

반응형

'.NET > VS.NET' 카테고리의 다른 글

MVC5 Database.Open 사용법  (0) 2019.07.15
IIS MVC4 활성화  (0) 2019.07.15
[C#] 문자열 암호화 - RSA, MD5, DES  (0) 2010.10.21
[VC++] Othello 소스  (0) 2010.10.21
C# 에서 RichTextBox의 MaxLength  (0) 2010.10.21

+ Recent posts