It works

|


It Works
국내도서
저자 : R. H. J / 서재경 역
출판 : 매경출판(매일경제신문사) 2005.08.10
상세보기


It works 


우리는 무엇이든지 이룰 수 있다. 

그방법은 단지 간절히 원하고 아래의 세가지 적극적 규칙을 준수하는 것이다.



성취의 세 가지 적극적 규칙


1.원하는 목록을 날마다 아침 점심 저녁 세차례 읽는다.


2.원하는 대상을 가급적 자주 생각한다.


3.아무에게도 이 플랜을 말하지 않고 오로지 자신의 마음속에 있는 위대한

   능력에게만 이야기한다. 그러면 이 능력이 자신의 객관적 의식에게 소원 성취의

   비결을 제시해준다.



+김수영의 "멈추지마, 다시 꿈부터 써봐" 에서도 언급했었는데 역시 이것도 리스트를 작성하고

항상 생각하고 간절히 소망하기만 하면된다.

그럼 NLP 처럼 그것이 효과가 나타나기 시작할 것이다.


"당신은 이것을 받아들일 수도 있고 또 거절할 수도 있다" 수용여부에 따라서 우리는 예전 그대로 일 수도있고

원하는 것을 얻을 수도있다. 선택은 우리의 몫이다.


+이책은 거의 30페이지 분량이다. 내용도 간단하고 읽기도 쉽다. 

이제 현실에서 불평과 불만만 하지 않고 진정으로 나를 바꾸기를 원한다면 한번 시도해보자

(솔직히 그런 불평을 하는 나도 그 불평을 어느새 당연하다고 생각하고 받아들이는 경우가 많다..)


어차피 손해도 아니니까..


단 주의할점은 절대 타인에게나 자신에게 해가되는 것을 소망하면 안된다.

그리고 간단한것부터 시작하라~

And

[C#] 사용자 정의 코드조각 추가하기 (Code Snippet)

|

 코딩을 하면서 자주 사용하는 IF 구문이나 FOR 구문을 사용할때 전체 코드를 다 타이핑 하지 않고

if를 입력후에 TAB을 두번 누르면 해당 IF 구문이 자동적으로 추가가 됩니다. 이런것을 코드조각이라고 합니다.





 이처럼 시스템에 미리 있는 코드조각 말고 사용자가 추가적으로 정의해서 사용이 가능합니다.

아래의 예제는 사용자가 MSSQL DB Connection String을 자동적으로 생성하게 도와줍니다. 또한 코드 조각의 일부를

사용자가 바꾸게 하는 기능도 가능합니다.


1.코드조각에 사용할 XML 파일을 생성해줍니다. 기본틀은 아래와 같습니다.
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets
    xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title></Title>
        </Header>
        <Snippet>
            <Code Language="">
                <![CDATA[]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

위에서 Title에 해당 코드조각의 이름을 넣어주고 Code에 넣을 코드를 넣으면 됩니다.




 2.사용자 입력이 가능한 DB ConnectionString 코드조각
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets
    xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>HongsMSSSQLConnectionString</Title>
    </Header>

    <Snippet>
      <Code Language="csharp">
        <![CDATA[
        string $VariableName$ = "Data Source=$SqlServerIP$;Database=$SqlDataBaseName$;User Id=$LogInID$;Password=$LoginPWD$";
        ]]>

      </Code>
      <Declarations>
        <Literal>
          <ID>VariableName</ID>
          <ToolTip>Replace with a Variable string.</ToolTip>
          <Default>"Variable string Name"</Default>
        </Literal>
        <Literal>
          <ID>SqlDataBaseName</ID>
          <ToolTip>Replace with a Database Name string.</ToolTip>
          <Default>"SQL Database Name string"</Default>
        </Literal>
        <Literal>
          <ID>SqlServerIP</ID>
          <ToolTip>Replace with a SQL Server IP  string.</ToolTip>
          <Default>"SQL SQL Server IP string"</Default>
        </Literal>
        <Literal>
          <ID>LogInID</ID>
          <ToolTip>Replace with a Login ID string.</ToolTip>
          <Default>"SQL Login ID string"</Default>
        </Literal>
        <Literal>
          <ID>LoginPWD</ID>
          <ToolTip>Replace with a Login Password string.</ToolTip>
          <Default>"SQL Login Password string"</Default>
        </Literal>

      </Declarations>

    </Snippet>
  </CodeSnippet>
</CodeSnippets>

위에서  <Declarations> 노드를 추가해서 사용자가 대체할 수 있는 문자나 객체를 선언해주면 된다.

코드 내용에는 대체되는 변수를 $$로 감싸야 한다. Language="csharp"로 설정해야한다.



 3.파일명을 .snippet으로 변경

 4.VisualStudio 에서 도구(Tools)/코드 조각 관리자(Code Snippets Manager)로 이동 

 5.가져오기(import) 클릭 

 6.코드조각 저장 위치로 이동해서 파일선택 후 열기(open)
   -저장하면 아래의 위치로 이동한다. 
    %USERPROFILE%\Documents\Visual Studio 2013\Code Snippets\Visual Basic\내 코드 조각 

7.사용은 .cs 페이지에서 마우스 우클릭 > 코드조각 추가 ( Insert Snippet) > My Code Snippets > 저장한 코드 조각 선택



And

[C#] 이벤트 생성 및 사용자 정의 EventArg

|

이벤트를 사용자가 생성하고 구독하는 방법에 대해서 살펴보겠습니다.

이벤트를 받을때 파라미터로 데이터를 받으려면 EventArg클래스를 상속받아서 원하는 항목을 추가해서

사용이 가능합니다.


아래는 이벤트를 발생시키는 클래스와 EventArg를 재정의한 클래스, 그리고 그 이벤트를 사용하는 예제입니다.



1.EventArg

/// Event Arguments Class
/// </summary>
public class HongsEventArgs : EventArgs
{
    public string Message { get; set; }
    public string SimpleData { get; set; }
    public List<Object> Data { get; set; }
}

위의 HongsEventArgs는 EventArgs를 상속받아서 3가지의 멤버변수를 추가했습니다.

여기에서 위의 2개는 단순 데이터 전달을 위해서 추가했구요, 마지막은 어디서나 사용가능하게

object를 리스트로 선언해서 어떠한 데이터라도 받을 수 있게 처리하였습니다.



2.이벤트 발생클래스

class SomethingEvent
{
    public event EventHandler eventSomthingClicked;

    public void RaseEvent()
    {
        try
        {
            if (eventSomthingClicked != null)
            {
                HongsEventArgs nowEventArg = new HongsEventArgs();
                nowEventArg.Message = "이벤트 클릭";
                nowEventArg.SimpleData = "NewSimpleData";
                nowEventArg.Data = new List<object>();
                nowEventArg.Data.Add(32);
                nowEventArg.Data.Add("HongJinHyeon");
                nowEventArg.Data.Add(new List<string>());
                eventSomthingClicked(null, nowEventArg); 
            }
        }
        catch (Exception)
        {
            
            throw;
        }
    }

}

위에서는 이벤트를 event EventHandler 로 선언해주고, 이벤트를 발생하는 부분에서 HongsEventArgs를 인스턴스화 해서 값 들을

할당을 해줍니다. 그리고  eventSomthingClicked(null,nowEventArg)로 이벤트를 발생시켜줍니다.

여기서 if로 eventSomthingClicked가 null 인지 체크하는 부분이 있는데요. 이 체크를 안하고 그냥 이벤트를 발생시켜버리면 오류

발생합니다. 이유는 이 이벤트를 실행하는 것이 델리게이트를 실행하는것과 비슷한데요 그 대상 함수가 없으니 오류가 발생하는 것입니다. 



3.이벤트 구독

private void Form1_Load(object sender, EventArgs e)
{
    try
    {
        SomethingEvent EventCreator = new SomethingEvent();
        EventCreator.eventSomthingClicked += EventCreator_eventSomthingClicked;
        EventCreator.RaseEvent();
    }
    catch (Exception)
    {
        
        throw;
    }
}

void EventCreator_eventSomthingClicked(object sender, EventArgs e)
{
    try
    {
        HongsEventArgs RecievedEventArg = e as HongsEventArgs;

        Console.WriteLine(RecievedEventArg.SimpleData);
    }

    catch (Exception)
    {
        
        throw;
    }
}

사용은 위에서처럼 이벤트를 구독한 후에, 이벤트를 구독하는 메서드에서 EventArgs를 as로 형변환을 해주고 사용해주면 됩니다.



And