반응형

직접 코드를 짜서 unsafe를 사용한 것이 아니라 라이브러리를 가져다 쓰는데 

unsafe때문에 자꾸 빌드 에러가 낫다.

그래서 어떻게 사용가능하게 설정하는지 알아보자앗.



우선 Visual Studio가 아닌 monodevelop 만 알아보도록 하자


설정이 안된 상태에서 빌드시 에러 화면을 보면

"Unsafe code requires the `unsafe' command line option to be specified" 에러가 발생한다.

인터넷에 뒤지다 보니 커뮤니티에 질문이 올라와 있는 것을 보고 해결방법을 찾았다.



1. 우선 좌측에서 프로젝트를 클릭

2. Project -> [Project이름] Options 선택







선택을 하면 위와 같은 창이 나오고 Build > General >Allow 'unsafe'code 를 체크한 뒤 확인을 누르면 된다.


끝 !






반응형
반응형

라즈베리파이에서 프로그램 개발중인데 이게 얼마나 느린지... 를 알기위해 프로그램 진행 시간을 알아야 했다.


방법을 알아보잣.


코드는 매우 심플하다. 

StopWatch Class 를 사용할 것이다.



namespace 는 System.Diagnostics 를 추가해 주고

어느정도 정확한지 알아보기 위해 Sleep 함수를 사용해보았다.


Stopwatch 로 선언 및 할당을 해주고

Start를 메소드를 실행한다.

실행된 순간부터 ElapsedMilliseconds 를 얻어오기 전까지 값을 화면에 표시한다.




결과는 매우 정확하다.









반응형
반응형

실시간으로 파일에 로그를 남기는 폼이 떠 있는데 닫기를 누르면 로그가 중단된다.

그래서.. 닫기를 눌렀을 때 진짜 닫을 것인지 묻고 그 결과에 따라 폼을 닫히게도 하고 그대로 두기도 하는 방법을 알아보자.


이전에 키 프레스 이벤트에서 키 필터 하는 것을 보고 이것도 가능할 것이라 생각되어 무작정 코딩을 해보았다.


우선 닫히지 않게 해보았다.


인자로 넘어오는 FormClosingEventArgs 의 속성을 보니까 Cancel이 있었고, 설명을 보아하니

이 이벤트를 취소할 수 있다고 나왔다. true로 설정을 바꾸면 폼이 닫히질 않는다...


이제 기능을 추가 메시지 박스를 띄워서 진짜 닫을것인지 확인 후 그 결과를 가지고 폼을 닫거나 유지 하도록 하자.




메시지 박스의 DialogResult 의 값을 비교하여 Cancel 이면 폼을 닫지 않게 짜보았다.

내가 만든 프로그램에 적용하면 될 것 같다.


반응형
반응형

프로그램이 일정 시간마다 상태를 체크해서 문제가 있을 시 메일을 보내는 코드를 작성을 작성 중..

메일 내용을 바꾸고 싶은데 프로그램을 계속 수정을 할 수 없으니 파일내용을 불러 오도록 수정하려고 한다.

장문이 될까 싶어 테스트..

사용자 입장에서 프로그램을 제작하기란 쉽지 않네...





이런식으로 하면 텍스트파일 처음부터 끝까지 읽어 올 수 있다.

readme.txt 라는 파일은 많으므로 아무거나 읽어 보도록 하자.


읽고보니.. 최근에 설치한 MonoDevelop 의 readme 파일이었다.


이런식으로 email 보낼 때 text 파일을 불러와서 보내도록 하자.




반응형
반응형

C#에서 Line Chart를 사용하고 있는데

Series를 2개 쓰면서 Y축을 주,보조를 사용하게 되었다.

그런데 어느라인이 어떤 축을 사용하는지 명확하지가 않아

표시를 하려는데, 이거 검색으로 도저히 안나오더라.


그래서.. 클래스를 하나씩 하나씩 뒤지면서 테스트해보다가 찾아냈다.


힘들었다... ㅠㅠ





찾아냈지만 뭔가 허무하군.. 적용된 것만 결과물로...




반응형
반응형
매우 간단하다...
그러나 매번 까먹는다는...

결과









반응형
반응형

오늘은 삽질을 꽤나 오래 했다.

DataGridView 간 DataRow를 이동시키려고 했는데 자꾸 예외가 떳다.

상황은 DataGridView에 DataTable을 바인딩 시키고 클릭한 Row를 삭제하고 옆에 있는 DataGrid에 옮기는 것이다.


이 상태에서 홍길동을 클릭하면 오른쪽 으로 옮겨가는 것을 할 것이다.


이런식이다.


   

코드는 이러하다.

dataGridView.DataSource에 DataTable을 넣고 CellClick 이벤트가 발생하면 선택된 Row를 오른쪽에 추가하고 

선택된 Row를 삭제하는 것이다.


우선 첫번째 발생했던 문제는 dataGridView2.Add(row)를 할 경우 발생한다.

위처럼 DataTable을 변경하는 것이 아니라 직접 dataGridView에서 수정하려고 할 경우 바인딩 되어 있어 안된다고 에러가 발생한다. 따라서.. 방법은 바인딩 된 DataTable을 수정하는 것이다.


두번째 발생했던 문제..

선택한 Row를 어떻게 DataRow로 변경할 것인가.!!!!

구글링을 쭉 해본결과 찾아냈다.



이런 식으로하면 해결 !! 어느 외국 커뮤니티에서 발견하였다. 


DataGridViewRowCollection to DataRow 로 검색했던것같다.




세번재 발생한 문제 !!!!!

dt2.Rows.Add(row) 를 할때 발생한다.

"이 행은 이미 다른 테이블에 속해 있습니다" 라는 에러 인데.. 이것도 한참을 헤맨 결과 찾았다.

dt2.Rows.Add(row.ItemArray);


MSDN에 나오니 자세히 보면 될것 같다.

















반응형
반응형

Server/Client 프로그램을 만들던 중

Client가 로그인이나 다른 연결 시도 시 지연이 될 때가 있어서 지연되는 동안 ProgressBar를 띄우려고 했었다.

그런데.. 이것이 닫기버튼이 있어서 예상치 못하게 종료가 되면 ProgressBar가 있는 Form을 닫는 문장에서 에러가 발생했다.

그래서 닫기 버튼을 없애기로 하였다..


우선 기본적으로 셋팅을 하면


위의 사진처럼 최소, 최대, 닫기 버튼이 나온다.


이제 폼의 속성 창으로 이동해서 창 스타일에 가보면

ControlBox 가 True로 되어 있는 것을 확인할 수 있다.

이것이 최소,최대,닫기 버튼에 관한 속성이다.


False로 바꾸어 주자.


False로 바꾼 후 폼을 확인해 보면



이처럼 변한 것을 확인할 수 있다.


닫기 버튼이 없으므로 프로그램상에서 종료해주지 않는이상 계속 떠있게 된다.




반응형
반응형

int 형 정수만 입력을 받아야 하는 일이 생겼다.

만약에 입력을 다 받은 후 검사를 하려면 소스코드가 엄청 길어질 것만 같아서 

방법을 찾아 보았다. 역시나 방법은 있더라.

 

출처 : http://valkyurey.tistory.com/28

 

소스코드를 보면

private void txtInterval_KeyPress(object sender, KeyPressEventArgs e)         
{             //숫자만 입력되도록 필터링             
	if(!(char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back)))    //숫자와 백스페이스를 제외한 나머지를 바로 처리             
    {          
    	e.Handled = true;             
    }         
}

예전 코드를 넣던 방식이 안되어서.. 

 

 

위와 같다.

간단히 설명하자면 키가 눌렸을 때 char.IsDigit 메소드로 숫자 인지 확인해서 아닌경우는 바로 True로 처리

백스페이스 기능도 필요하므로 Convert.ToChar(Keys.Back)로 백스페이스인지 확인하여 필터링.

 

생각보다 간단하다. 이런식으로 이벤트를 처리하면 간단하다는 걸 느꼇다.

한글 입력 안되게 하는것도... 알아봐야 할텐데... 

찾아보니 많이 나온다. 나중에 정리 하는걸로.

 

 

 

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

 

드디어.. 한글 입력 안되게 하는 아주 간단한 방법을 알아왔다.

아... 어이가 없겠지만 VB에서 힌트를 얻었고 , C#도 동일 하다.

 

우선 TextBox 속성에 가보면 ImeMode가 있다. 

이 모드가 기본 값이 No Control일 것이다.

 

이것을 Disable로 바꾸면 한글로 되어 있는 상태에서 키를 눌러도 영어가 입력되는 것을 볼 수 있다.

 

이거.. 그림 넣을때 도형으로는 못넣는것인가 ? 아시는 분 ?

 

아무튼 이런식으로 한글 입력을 막을 수 있다.

 

IME mode에 alpha 나 alpha full 로 해보았으나 한글 입력이 되어서 disable이 제일 효율적인 방법인것 같다.

 

반응형
반응형

Timer에 각각 다른 인자를 전달하여 생성을 하려고 하였다.

그런데 CallBack만 사용해서는 인자 1개밖에 전달이 되지 않았다.

방법을 찾던 중 MSDN에 생성자 관련 예제가 있어 확인해보니 Class를 생성하여 여러개의 인자를 전달하지 않고도 

각각 다른 값을 가지고 Timer를 생성할 수 있었다.


출처 : https://msdn.microsoft.com/ko-kr/library/2x96zfy7(v=vs.110).aspx




기존 사용하던 소스 코드.


System.Threading.Timer TimerTest;


public MainForm()

{

InitializeComponent();

TimerTest = new System.Threading.Timer(testProc, "test", 1000, 10000);

}


private static testProc(object test)

{

MessageBox.Show(test.ToString());

}


위 처럼 할 경우 10초에 한번씩 "test" 라는 메시지 박스가 생성이 된다.

더 많은 인자가 필요해서 위의 출처에 따라 클래스를 만들고. Test를 진행해보았다.



    class Program

    {

        private static System.Threading.Timer[] testTimer;


        static void Main(string[] args)

        {

            testTimer = new Timer[3];


            testTimer[0] = new Timer(new TimerClass(1, "test1").TestCallBack, "object1", 1000, 1000);

            testTimer[1] = new Timer(new TimerClass(2, "test2").TestCallBack, "object2", 1000, 2000);

            testTimer[2] = new Timer(new TimerClass(3, "test3").TestCallBack, "object3", 1000, 3000);



            Thread.Sleep(10000);

        }

    }


    class TimerClass

    {

        private int value1;

        private string value2;

//각기 다른 값을 넣도록 생성자 정의.

        public TimerClass(int val1, string val2)

        {

            value1 = val1;

            value2 = val2;

        }

//Timer가 주기적으로 실행할 CallBack 함수.

        public void TestCallBack(object data)

        {

            Console.WriteLine("{0}   {1}   {2}", value1, value2, data.ToString());

        }

    }

이해가 쉽게 하기 위해 Console을 사용..



[결과]



내 프로젝트에 적용을 해서 진행해야 겠다. 끝 !



반응형

+ Recent posts