저번에 괴-_-담을 들은 적이 있다.
" C# 개발도 , 리눅스에서 가능혀. ""풉!"그때의 나는 한마디 비웃음을 가볍게 흘려주었다. =_=
'뭔소리여 ! .NET프레임워크가 완전 윈도우 종속적인 플랫폼인데 헛소리!'그러나 ... 나는 븅신이었다 -_-
음... 역시 오픈소스 진영의 힘은 위대했다 ;;
MS에서 개발한 C#을 , 성공적으로 리눅스에서 돌아가도록 포팅한 것이었다;;
그 이름도 거룩한. mono.
리눅스에서 CLI 환경을 구축해서 , .NET 프레임워크의 어플리케이션들이 돌아가게 만든다 =_=..
멋져부렁!더 멋진건 .. C#뿐만이 아니라 ASP.NET / VB.NET 까지 돌아간다는것!!그래서.. 난 당연히 테스트를 해보았다;
컴파일러는 gmcs .
기본적인 C# 콘솔모드 프로그래밍은 이상없이 잘 되었다.
그래서 대-_-망의 GUI 프로그래밍 개시!
using Windows.Form;이놈을 적어넣고 vi에서 저장을 한후 , 설레이는 마음을 안고 살포시 ,gmcs를 써서 컴파일 하자 마자!
gmcs는 에러메시지로 나를 반겼다 -_-
그런 네임스페이스가 없다나 뭐라나 -_-
인터넷에서 조금 더 알아보았다.
Gtk# 이란 놈이 있었다.
사실 , Tk/Gtk는 전에 Python을 겉-_-핥기식으로 만져볼때 잠깐 만져보았던 놈인데 ,, 크로스플랫폼 GUI 프로그래밍 인터페이스 였던 걸로 기억했었는데..
이놈이 , C#언어에 맞게 '#'이란 타이틀을 달고 리눅스용으로 다시 태어난 것이었다.
Monodoc ( Gtk# / C#용 레퍼런스 ) 를 열심히 읽어보며 , 결국 ,, 난 리눅스 X윈도 상에서 창을 띄우고야 말았다 =_=ㅋㅋ 아우 신기혀;
아차. 팁 한가지!!gmcs를 써서 Gtk#을 컴파일 할때는 다음과 같이 옵션을 주어 Gtk# 패키지를 지정해 주어야 정상적인 컴파일이 된다!gmcs source.cs -pkg:gtk-sharp-2.0음 .. 무튼 결론은 ..
C# MS윈도우즈 프로그래밍이랑 많이 다르지 않았다는게 신기했다.
이벤트 핸들러 등록도 그렇고,, 이벤트 핸들링 메소드에서도 인자도 거의 비슷하게 받았다. 이벤트 핸들링 클래스 이름도 거의 비슷하고..
음.. 근데 많이 다른점은.
MS윈도우즈에서는 , 컨트롤이 폼위에서의 상대좌표에 의해 배치되는 반면 , Gtk#은 , HBox , VBox , Table 이란 놈들로 폼 위에 격자모양으로 딱맞게 배치하는 식이었다.
으흐흐.. 그럼 이쯤에서 적절한 스크린샷.

멘트가 매우 방-_-정맞지만 이정도는 애교로 넘어가주세욤 =_=
무튼.. ㅎㅎ 매우 알기 쉬운 레퍼런스에 ,,
윈도우 C# forms프로그래밍이 가능하다면 ..
금방 익숙해 질수 있다 ; ㅎㅎ
C# 자체가 쉬운 면도 없진 않지만 .;;
사족.
코딩은 vi로 해야지 역시 초간지!!으흐흐 =_= 전 변태가 된 겁니까 .. ㅜㅜ
콘솔변태 =_=ㅋㅋ
sample program code.namespace HelloWorld
{
using System;
using Gtk;
using Gdk;
public class HelloWorld
{
public static void Main ( string[] args )
{
Application.Init ();
Gtk.Window win = new Gtk.Window ( "Hello! ApPLe!NET" );
win.DefaultHeight = 400;
win.DefaultWidth = 400;
VBox vbox = new VBox ();
Label lblWelcome = new Label ();
lblWelcome.Text = "처음으로 만들어보는 mono C# with Gtk#";
vbox.Add ( lblWelcome );
Button btn1 = new Button ( "누르면 종료되욤" );
btn1.Clicked += new EventHandler ( Button1_OnClick );
vbox.Add ( btn1 );
Label lblContext = new Label ();
string szContext = "Gtk로 하니까 참 재미있고 좋군하";
szContext += "\nC#은 비쥬얼 스튜디오로만 만지다가 이걸로 하니 아주그냥~";
szContext += "\nhttp://www.applenet.ze.to";
lblContext.Text = szContext;
vbox.Add ( lblContext );
Button btn2 = new Button ( "누르면 글씨가 바뀔꺼예욤" );
btn2.Clicked += new EventHandler ( Button2_OnClick );
vbox.Add ( btn2 );
win.Add ( vbox );
win.DeleteEvent += new DeleteEventHandler ( Form_OnQueryUnload );
win.ShowAll ();
Application.Run ();
}
private static void Form_OnQueryUnload ( object sender , DeleteEventArgs e )
{
Application.Quit ();
}
private static void Button1_OnClick ( object sender , EventArgs e )
{
Application.Quit ();
}
private static void Button2_OnClick ( object sender , EventArgs e )
{
Button btn = (Button)sender;
btn.Label = "하악하악";
}
}
}