달력

4

« 2024/4 »

  • 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
  • 26
  • 27
  • 28
  • 29
  • 30
질문자 : 괴무리(monster7575)  링크 : http://cafe.naver.com/winmodev/1189
<질문내용>

안녕하세요. 처음 시작하는 초보입니다.

 

설명이 좀 애매할지도 모르겠으나.. 우선 질문 한번 드려볼께요..

 

compact framework 2.0이고 mobile 6.0 pro 에뮬로 테스팅을 하고 있습니다.

 

우선 Form이 2개가 있습니다.

 

Form1에는 예를 들어 소녀시대의 멤버 이름이 적힌 9개의 버튼이 있구요

각 버튼을 누르면 Form2로 넘어가면서 각 멤버에 대한 프로필 (이름, 나이, 키, 사진)이 나오는

순서의 애플을 만들어 보려고 하는데요.

 

아래 제가 9개의 멤버들의 정보를 배열에 담아 Form2으로 값을 넘겨 각각의 프로필을

나타내게 끔하려고 소스를 넣어 두겠습니다.

 

총 9개의 배열이 있는데. 한 배열에 프로필 내용을 다 담고 싶은데 잘 안되더라구요 ㅠㅠ

그리고 Form1 소스 아랫쪽에 보심 Form2로 sender 하는 부분이 있는데

 

Form2에서 이값을 어떻게 받아서 출력을 해주어야 하는지 잘 모르겠습니다.

힌트나 참고 할수있는 소스를 공유 주시면 너무 감사드리겠습니다.

관련소스/참고자료

 Form1.cs

 

namespace FormLectureNew
{
    public partial class Form1 : Form
    {
       
        String[] memberArray = new String[9];
        int CheckNum;   
      

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
          
           int SHeight = SystemInformation.MenuHeight; //MainMenu 세로 길이

           Size rect = Screen.PrimaryScreen.WorkingArea.Size; //작업 영역 Widht, height
           int WWidth = rect.Width;  //작업 영역 가로길이
           int WHeight = rect.Height-SHeight; //작업 영역 세로길이

          
           Sosimember member1 = new Sosimember("윤아",10,150,40,"yuna.gif");
           Sosimember member2 = new Sosimember("수영",20,160,41,"suy.jpg");
           Sosimember member3 = new Sosimember("효연",30,161,42,"hy.gif");
           Sosimember member4 = new Sosimember("유리",31,162,43,"yuri.gif");
           Sosimember member5 = new Sosimember("태연",25,166,33,"ty.gif");
           Sosimember member6 = new Sosimember("제시카",26,120,20,"jesica.gif");
           Sosimember member7 = new Sosimember("티파니",27,130,25,"tipany.gif");
           Sosimember member8 = new Sosimember("써니",22,166,50,"seoni.gif");
           Sosimember member9 = new Sosimember("서현",23,168,47,"seoh.gif");   

           memberArray[0] = member1.Name;
           memberArray[1] = member2.Name;
           memberArray[2] = member3.Name; //위의 memer1~9의 값을 한번에 담고 싶은데 안되네요. ㅠㅠ
           memberArray[3] = member4.Name;
           memberArray[4] = member5.Name;
           memberArray[5] = member6.Name;
           memberArray[6] = member7.Name;
           memberArray[7] = member8.Name;
           memberArray[8] = member9.Name;

          
          
         
         

            for(int i =0 ; i < memberArray.Length ; i++)
            {
            Button button = new Button();
            button.Text = memberArray[i];
            button.Location = new Point(0, (WHeight/memberArray.Length)*i);
            button.Size = new Size(WWidth, WHeight/memberArray.Length);
            button.ForeColor = Color.SteelBlue;
            button.BackColor = Color.White;
            button.Click += new EventHandler(button_Click);
            Controls.Add(button);
            }
               
        }
       

        void button_Click(object sender, EventArgs e)
        {
           
            Button button = (Button)sender; 
           
           
            for (int i = 0; i < memberArray.Length; i++)
            {
                if(button.Text==memberArray[i]) //각 버튼 클릭시 i값을 체크
                {
                    CheckNum = i;
                }
            }
            Form2 f = new Form2(memberArray[CheckNum]); //Form2로 배열을 넘겨 Form2에서 출력하고자하는데 방법을;;
            f.Owner = this;
            f.ShowDialog();
        }
    }
}

 

 

Form2.cs

 

using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
namespace FormLectureNew
{
    public partial class Form2 : Form
    {


        public Form2()
        {
            InitializeComponent();
        }
       
       public Form2(string Name) //Form1의 각 배열이 값을 어떻게 가지고 와서
        {
            InitializeComponent();
         
        }
       
       
        private void menuItem3_Click(object sender, EventArgs e)
        {
          
            MessageBox.Show("이름 : {0}\r\n나이 : 20세\r\n키 : 180Cm\r\n몸무게 : 80kg"); //여기에 출력할수있을까요.. ㅠㅠ
        }
         
    }
}

<답변내용>

안녕하세요 루나네스 입니다

간단한 예제를 하나 만들어 봤습니다
Sosimember 라는 클래스는 임의로 만들었고

Form1에서 Form2로 데이터를 넘기는 작업이 들어가 있습니다
Form2의 생성자를 Form2(Sosimember mbr) 이런식으로 overloading 해서 받는 것을
예제로 만들어 봤습니다

추가로...
native라면 소멸자에서 string을 저장한 버퍼를 해제해 줘야 하지만
managed에서 string은 그럴 필요가 없습니다

우선 C#의 클래스 부분부터 차근차근 공부해보시는 것이 좋을 것 같네요 ^^;

 작성일 : 2010.02.05

보다 자세한 정보는 윈도우 폰/모바일 개발자 모임에서 만나보실 수 있습니다
:
Posted by Lunaness
질문자 : 잠와(taijiduri)  링크 : http://cafe.naver.com/winmodev/1182
<질문내용>

한글화 하기전에는 picturebox를 사용해도 에러가 안떴는데

한글화 한후부터는 picturebox에 사진을 넣으면 에러가 뜨네요

밑에와 같은 에러요

 

처리되지 않은 'System.PlatformNotSupportedException' 형식의 예외가 mscorlib.dll에서 발생했습니다.

추가 정보: PlatformNotSupportedException

 

그래서 에뮬자체에서 영어로 바꿨더니 에러가 안뜹니다ㅜ

어떻게 안되나요??

 

그리구 한가지 질문이요

 

첨에 에뮬설정할때 기본사이즈가 작게 나오는데

만약 옴니아같은 폰에 넣을경우 사이즈를 그거에 맞게 고처야 하나요?

질문검색 했는데, 바꾸지 말라고 하는데

그럼 에뮬실행했을때 이미지가 너무 작고 빈공간이 많이 생기는데

그건 어떻게 하나요??

<답변내용>

안녕하세요 루나네스 입니다

 

잠와님께서 에러나는 부분을 저도 테스트 해 봤는데요..

특별한 이상을 발견할 수 없었습니다

 

예제 파일을 첨부해 드립니다

지난번 Pictubox 질문 올리신 글에 자답으로 링크 남겨 주신 부분하고
최대한 동일하게 작성해 봤습니다

VS2008 / .Net3.5 CF / 제가 작성한 에뮬레이터와 폼팩터를 사용하였습니다

확인해보시고 이상있으시면 다시 질문 주세요~!

 작성일 : 2010.02.04

보다 자세한 정보는 윈도우 폰/모바일 개발자 모임에서 만나보실 수 있습니다
:
Posted by Lunaness

질문자 : sinklinu  링크 : http://cafe.naver.com/winmodev/1147
<질문내용>

기존 임베디드 리눅스 환경에서 플랫폼 개발만을 해오던 1人입니다.

수차례에 걸쳐 윈모데브의 글도 많이 읽게 되는 군요.

항상 많은 도움 주셔서 정말 감사합니다.

 

정말 초짜같은 질문일 수도 있으나, 간단한 질문을 하나 올립니다.

 

제가 앞으로 개발하고자 하는 분야는 WM분야이며, C#.NET으로 개발을 진행하고자 합니다.

 

프로그램 개발하기 및 추가적인 관련 글 들을 보면, 웹에서 다운로드 하여 설치 하는 부분을 제외 하고는 VS2008만 설치하면 개발 환경이 갖춰 진다고 나와 있는데요.

 

VS2008 Professional을 사용하면 C# 개발및 C#에서의 .NET 개발까지 완료할 수 있는 건가요??

 

아직. 미들웨어 개념의 좀 부족하다 보니.

 

조언 부탁 드립니다.

 

감사합니다.

<답변내용>

안녕하세요 루나네스 입니다

Visual Studio 2008 Professional 에서 C# / .NET Compact Framework 개발이 충분히 가능합니다

다만, 기본으로 설치되어 있는 스마트 장치 SDK가 Windows Mobile 5 SDK 이기 때문에
요즘 출시되는 최신형 단말기의 WM6.X 버전에 대응하지 못합니다
(WM5로 개발해도 WM6.X에서 동일하게 실행은 됩니다만, 개선된 기능이나 .Net CF 3.5는 이용하지 못합니다)

따라서, WM6 SDK Professional 을 설치하시고, KOR 에뮬레이터와, Eng WM6.1.4 에뮬레이터(이 버전부터 와이드 단말기 지원)
WM6.5로 개발하시려면 추가로 WM6.5 DTK를 설치하시면 됩니다
(단말기가 따로 있으시다면 에뮬레이터는 설치 안하셔도 크게 상관은 없습니다만...)

뽐뿌맨님께서 작성하신 http://cafe.naver.com/winmodev/189 게시물 참고하시면
초기 환경설정에 많은 도움이 될 것 입니다

여담이지만..
Windows Mobile은 미들웨어가 아니고 플랫폼 입니다
현재 WM6.X는 마이크로소프트에서 개발된 Windows CE 5.0을 기반으로 완성된 플랫폼으로
주로 PDA나 스마트폰(윈도폰)에 설치가 됩니다

PC에 설치되어 있는 Windows나 Linux, MAXOS10 같은 모바일 단말기에 설치되는 OS 입니다

 작성일 : 2010.02.01

보다 자세한 정보는 윈도우 폰/모바일 개발자 모임에서 만나보실 수 있습니다

:
Posted by Lunaness
질문자 : jik0101  링크 : http://cafe.naver.com/winmodev/1148
<질문내용>

현재 옵니아2 폰이 있는데 기기에 넣어서 프로그램을 실행시켜보고 싶어서 질문 드립니다.

현재는 빌드할때 GT-I8000 KOR WM 6.5 Pro WVGA Emulator로 빌드를 하고 있습니다.

 

그런데 이걸 폰에 직접 넣어서 테스트를 해보고 싶은데 정확한 절차가 어떻게 되는지 전혀 모르겠습니다..;

 

폰에 넣어서 테스트 하는 방법은 아무것도 모르는 상태라 자세하게 설명 해주시면 감사하겠습니다 ㅠㅠ

 

이상하게 에뮬레이터에서 실행하니 로딩하는게 너~~~~~~무 느리네요;;

 

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

루나네스 개발자님 말씀대로 실행을 했더니 단말기로 바로 실행되는거 같습니다 ^^

 

그런데 에뮬에서 하면 잘 나오는 이미지 경로를 단말기에서는 찾지를 못하네요..

 

'\Storage Card\bg1_1.png' 경로의 일부를 찾을 수 없습니다.

위치 : System.IO._Error.WinIOError()

위치 : System.IO.FileStream..ctor()

위치 : System.IO.FileStream..ctor()

위치 : Microsoft.WindowsMobile.DirectX,Direct3D.TextureLoader.FromFile()

위치 : Microsoft.WindowsMobile.DirectX,Direct3D.TextureLoader.FromFile()

위치 : DeviceApplication.Form1.Form1_Load()

위치 : System.Windows.Forms.Form.OnLoad()

위치 : System.Windows.Forms.Foem._SetVisibleNotify()

위치 : System.Windows.Forms.Control.set_visible()

위치 : DeviceApplication.Program.Main()

 

DX에서 이미지 하나만 출력하는 소스입니다. 그런데 실행하니 위와 같이 오류메세지가 쭉~ 뜨네요;;

에뮬레이터로 할때는 경로를 위에처럼 지정해주니 이미지가 잘 나오는데 왜 단말기에서는 찾을수 없다고 하는지..

그리고 DX를 사용하려면 단말기에 넣을때 또 다른 설정해 줘야 하는게 있나요?

아니면 아래 오류들이 경로를 못찾아서 따라서 나는 오류인지 DX쪽이 문제인지 잘 모르겠습니다..

<답변내용>

안녕하세요 루나네스 입니다

단말기가 있으시다면 단말기로 직접 디버그 및 실행 테스트가 가능합니다
다른 특별한 등록도 필요하지 않고
엑티브싱크(비스타 이상에서는 모바일 디바이스 센터)가 연결되어 있는 상태라면
비쥬얼 스튜디오 상단 도구바에 있는 [대상 장치]에서 아래 그림과 같이
[Windows Mobile 6 professional Device]를 선택하고 디버그 실행 하시면 됩니다

아무래도 에뮬레이터에서 실행하면 꽤 느린편 입니다

실제로 단말기에서 테스트 해본 후 완성하시는 것이 좋습니다

 

나중에 배포 테스트 (CAB  프로젝트 생성)시 생성된 CAB파일을 단말기로 복사해 넣으시고

직접 설치하면서 실행 테스트 하셔도 됩니다

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

 추가 질문 내용 답변

에뮬레이터에 [공유 폴더]로 컴퓨터 하드디스크 폴더에 bg1_1.png를 넣어두신 것 같네요
Bg1_1.png 라는 파일이 단말기의 Storage Card, 즉 micro SD 카드에 해당 파일이 없거나, micro SD 카드를 장착 안하신 것 같네요
절대경로로 설정하신 것 같은데요

단말기의 Storage card에 BG1_1.png 파일을 넣어주시거나
아니면 경로를 수정하셔서, 배포된 파일 위치에 넣어주세요

편하게 하시려면 프로젝트에 BG1_1.png 파일을 추가하여 주시고, 배포시 파일 속성에서 출력 디렉터리로 복사 에서 항상 복사로 선택해 주시면 배포 위치 \Program Files\프로젝트명 에 자동으로 복사 됩니다

이렇게 사용하시려면 경로를 "BG1_1.png" 이런식으로 정의해주셔도 됩니다

따로 하위 폴더 만들어서 넣어주셔도 좋구요 ^^

 작성일 : 2010.02.01

보다 자세한 정보는 윈도우 폰/모바일 개발자 모임에서 만나보실 수 있습니다
:
Posted by Lunaness
2010. 2. 17. 14:12

Timer 질문 입니다. Programing/WinMoDev Q&A2010. 2. 17. 14:12

질문자 : jik0101  링크 : http://cafe.naver.com/winmodev/1130
<질문내용>

WM에서는 타이머가 하나밖에 적용이안되는건가요?

 

타이머를 두개 만들었는데 하나는 인식을 하는데 하나는 인식을 못하네요;

<답변내용>

안녕하세요 루나네스 입니다

타이머는 일반적으로 멀티스레딩 환경에서 다중으로 동시에 사용이 가능합니다만..
(간단하게 예기하면) 타이머의 특성상 프로세스 동작 중 타이머가 작업권한을 받았다가 처리 후 반환하는 식 이기 때문에
동시에 사용하기에는 무리가 있습니다
특히 실시간으로 사용하는 것에는 매우 안좋습니다

질문 올리신 내용은 타이머가 인식되지 않는 다는 내용인데요
결론부터 말씀드린다면
타이머를 여러개 사용해도 전부 동작 한다는 것 입니다

tmrTimer1.enable = true;  <- 이 속성의 값이 true가 되어야 타이머가 동작됩니다

다만.. 위에서 언급드린 내용처럼
타이머의 한 주기 이벤트가 종료 되어야 다른 동작이 가능하기 때문에
타이머1의 Tick event에 정의된 내용이 많을 경우
처리를 하는 시간동안 타이머2의 Tick 이벤트를 실행하지 못하는 경우가 있습니다

Timer1의 간격 100ms
Timer2의 간격 500ms 라고 가정하고
Timer1의 Tick 이벤트에서 시스템에 저장되어 있는 파일을 전부 읽어오라는 (예가 너무 무식한가요;;)
명령을 수행하는데 대략 1000ms 가 걸린다고 하면
당연히 타이머2의 이벤트가 하나나 두개쯤 무시 되기도 합니다
(적고 나서 보니.. 진짜 무식하게 예를 들어놨네요;;  이런 개념이다 라고만 이해해 주세요)

타이머에 대한 자세한 내용은 우리카페 [소년포비]님께서 너무나 잘 설명해 주신 내용이 있습니다
http://blog.daum.net/starkcb/117

첨부된 예제는 제가 간단하게 만들어본
폼 컨트롤의 타이머 2개와 Timer class를 이용한 타이머 2개
총 4개의 타이머가 동작하는 예제 입니다

제가 추천해 드리는 방법은
가급적이면 타이머를 사용하지 않고 Thread를 통해서 작업을 진행하는 것이 좋습니다
단점은 Thread에서 직접적으로 폼 컨트롤을 제어가 불가능하기 때문에
Deligate를 사용해서 접근하도록 코딩을 해야 한다는 점 입니다만
최고의 장점으로 다른 작업에 영향을 주지 않을 정도로 정밀도가 향상됩니다

 작성일 : 2010.01.29

보다 자세한 정보는 윈도우 폰/모바일 개발자 모임에서 만나보실 수 있습니다
:
Posted by Lunaness