<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>쉽게 개발하기</title>
    <link>https://easy-coding.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 25 Jun 2026 20:18:13 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>SourceTree</managingEditor>
    <item>
      <title>VueJS 개발을 위한 Javascript ES6 문법 4개</title>
      <link>https://easy-coding.tistory.com/127</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 화살표 함수(&lt;span style=&quot;color: #ee2323;&quot;&gt;=&amp;gt;&lt;/span&gt;)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;div&gt;화살표 함수안의 this는 해당 함수가 수행되는 컨텍스트를 가리킴&lt;/div&gt;
(기존 함수에서는 this를 사용, 화살표 함수에서는 this없이 사용)&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;인자 값이 1개인 경우 () 생략가능&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;함수 정의 로직이 1줄이면 {} 제거가능&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1639121704268&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//일반 함수(ES5)
function (인자) {
}

//화살표 함수(ES6)
(인자) =&amp;gt; {
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 템플릿 리터럴 (Template literals)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문자열을 표시할 때 사용하는 작은 따옴표(&amp;lsquo;)나 큰 따옴표(&amp;ldquo;) 대신 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;백틱(`)&lt;/b&gt;&lt;/span&gt;을 사용하는 것을 의미&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;문자열을 여러 줄에 걸쳐 표시할 수 있습니다. (뷰 컴포넌트의 템플릿 선언 시에 유용함)&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;문자열과 자바스크립트 표현식을 함께 사용하기 좋습니다. (computed 속성 사용이 편함)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1639121823058&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Vue.component({
  template: `&amp;lt;div&amp;gt;
              &amp;lt;h1&amp;gt;&amp;lt;/h1&amp;gt;
              &amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;/div&amp;gt;`
});
 
hayou() {
  return `Hello, ${this.name}, how are you?`
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. 모듈 (Modules)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자바스크립트 파일의 객체를 다른 파일에서 로딩 하는것&lt;/li&gt;
&lt;li&gt;ES6이 나오기 전에는 특정 객체 &amp;amp; 파일 로딩 기능이 제공되지 않았음.&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;import&lt;/b&gt;&lt;/span&gt;, &lt;b&gt;export&lt;/b&gt; 문법으로 사용&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1639122048006&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//---기존 ES5 형태------
Vue.component('component1', { ... });
Vue.component('component2', { ... });
Vue.component('component3', { ... });
 
new Vue({ ... });


//---ES6 모듈 형태------
//component1.js
export default {
  helloVal: 'Hello VueJS'
}
 
//app.js
import comp1 from './component1.js';
console.log(comp1.helloVal);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4. 구조 분해와 확장 문법&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;객체 속성을 더 쉽게 정의하는 문법&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;할당 구조 분해 : &lt;/span&gt;&lt;b&gt;{ , }&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;확장 문법 :&lt;/span&gt; &lt;b&gt;...&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1639122543361&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//---할당 구조 분해 (Destructuring assignment)------
let obj = {
  prop1: 'Hello',
  prop2: 'VueJS'
};

//기존
const prop1 = obj.prop1;
const prop2 = obj.prop2;

//신규
const { prop1, prop2 } = obj;


//---확장 문법------
//기존
let newObj = {
  name: 'Joy',
  prop1: obj.prop1,
  prop2: obj.prop2
};
console.log(newObj.prop1); //Hello

//신규
let newObj = {
  name: 'Joy',
  ...obj
};
console.log(newObj.prop1); //Hello&lt;/code&gt;&lt;/pre&gt;</description>
      <category>웹/Vue</category>
      <category>...</category>
      <category>ES6</category>
      <category>export</category>
      <category>import</category>
      <category>vue</category>
      <category>모듈</category>
      <category>문법</category>
      <category>백틱</category>
      <category>화살표</category>
      <category>확장</category>
      <author>SourceTree</author>
      <guid isPermaLink="true">https://easy-coding.tistory.com/127</guid>
      <comments>https://easy-coding.tistory.com/127#entry127comment</comments>
      <pubDate>Fri, 10 Dec 2021 16:53:32 +0900</pubDate>
    </item>
    <item>
      <title>VueJS 정리#5 Life Cycle, computed, methods</title>
      <link>https://easy-coding.tistory.com/126</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;VueJS 다섯번째 정리입니다.&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Life Cycle :&lt;span&gt;&lt;b&gt; created&lt;/b&gt; &amp;gt; &lt;b&gt;mounted&lt;/b&gt; &amp;gt; &lt;b&gt;updated&lt;/b&gt; &amp;gt; &lt;b&gt;destoryed&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;참고한 값의 변경에서만 재실행 : &lt;b&gt;computed&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;모든 상황에서 재실행 : &lt;b&gt;methods&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;codepen&quot; style=&quot;height:700px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-height=&quot;700&quot; data-default-tab=&quot;html,result&quot; data-slug-hash=&quot;gOGMbPg&quot; data-user=&quot;vskfamnu&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/vskfamnu/pen/gOGMbPg&quot;&gt; VueJS #5&lt;/a&gt; by 이상섭 (&lt;a href=&quot;https://codepen.io/vskfamnu&quot;&gt;@vskfamnu&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;script src=&quot;https://cpwebassets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;</description>
      <category>웹/Vue</category>
      <category>computed</category>
      <category>created</category>
      <category>cycle</category>
      <category>life</category>
      <category>methods</category>
      <category>mounted</category>
      <category>vue</category>
      <category>생성</category>
      <category>생애주기</category>
      <category>순서</category>
      <author>SourceTree</author>
      <guid isPermaLink="true">https://easy-coding.tistory.com/126</guid>
      <comments>https://easy-coding.tistory.com/126#entry126comment</comments>
      <pubDate>Fri, 10 Dec 2021 15:01:50 +0900</pubDate>
    </item>
    <item>
      <title>VueJS 정리#4 멀티 인스턴스, 컴포넌트</title>
      <link>https://easy-coding.tistory.com/125</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;VueJS 네번째 정리입니다.&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;멀티 인스턴스 :&lt;span&gt;&lt;b&gt; new Vue()&lt;/b&gt; 여러개 생성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;컴포넌트 : &lt;b&gt;Vue.component()&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;codepen&quot; style=&quot;height: 600px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-height=&quot;600&quot; data-default-tab=&quot;html,result&quot; data-slug-hash=&quot;gOGMOdP&quot; data-user=&quot;vskfamnu&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/vskfamnu/pen/gOGMOdP&quot;&gt; VueJS #4&lt;/a&gt; by 이상섭 (&lt;a href=&quot;https://codepen.io/vskfamnu&quot;&gt;@vskfamnu&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;script src=&quot;https://cpwebassets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;</description>
      <category>웹/Vue</category>
      <category>Component</category>
      <category>multi instance</category>
      <category>template</category>
      <category>vue</category>
      <category>멀티</category>
      <category>여러개</category>
      <category>인스턴스</category>
      <category>컴포넌트</category>
      <category>콤포넌트</category>
      <category>템플릿</category>
      <author>SourceTree</author>
      <guid isPermaLink="true">https://easy-coding.tistory.com/125</guid>
      <comments>https://easy-coding.tistory.com/125#entry125comment</comments>
      <pubDate>Fri, 10 Dec 2021 14:57:23 +0900</pubDate>
    </item>
    <item>
      <title>VueJS 정리#3 클래스 바인딩, 스타일 바인딩</title>
      <link>https://easy-coding.tistory.com/124</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;VueJS 세번째 정리입니다.&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클래스 바인딩 :&lt;span&gt;&lt;b&gt; v-bind:class&lt;/b&gt;(v-bind 생략가능)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;스타일 바인딩 : &lt;b&gt;v-bind:style&lt;/b&gt;(v-bind 생략가능)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;codepen&quot; style=&quot;height: 600px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-height=&quot;600&quot; data-default-tab=&quot;html,result&quot; data-slug-hash=&quot;ExwKzVy&quot; data-user=&quot;vskfamnu&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/vskfamnu/pen/ExwKzVy&quot;&gt; VueJS #3&lt;/a&gt; by 이상섭 (&lt;a href=&quot;https://codepen.io/vskfamnu&quot;&gt;@vskfamnu&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;script src=&quot;https://cpwebassets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;</description>
      <category>웹/Vue</category>
      <category>class</category>
      <category>CSS</category>
      <category>Style</category>
      <category>vue</category>
      <category>vuejs</category>
      <category>바인딩</category>
      <category>스타일</category>
      <category>여러개</category>
      <category>적용</category>
      <category>클래스</category>
      <author>SourceTree</author>
      <guid isPermaLink="true">https://easy-coding.tistory.com/124</guid>
      <comments>https://easy-coding.tistory.com/124#entry124comment</comments>
      <pubDate>Fri, 10 Dec 2021 14:50:42 +0900</pubDate>
    </item>
    <item>
      <title>VueJS 정리 #2 폼입력, 조건문, 반복문</title>
      <link>https://easy-coding.tistory.com/123</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;VueJS 두번째 정리입니다.&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;폼입력 바인딩 :&lt;b&gt;&lt;span&gt; v-model&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;조건문 : &lt;b&gt;v-if&lt;/b&gt;,&lt;b&gt;&amp;nbsp;v-else-if&lt;/b&gt;,&lt;b&gt;&amp;nbsp;v-else&lt;/b&gt;,&lt;b&gt;&amp;nbsp;v-show&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;반복문 : &lt;b&gt;v-for&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;codepen&quot; style=&quot;height: 800px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-height=&quot;800&quot; data-default-tab=&quot;html,result&quot; data-slug-hash=&quot;mdBPdBe&quot; data-user=&quot;vskfamnu&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/vskfamnu/pen/mdBPdBe&quot;&gt; VueJS #2&lt;/a&gt; by 이상섭 (&lt;a href=&quot;https://codepen.io/vskfamnu&quot;&gt;@vskfamnu&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;script src=&quot;https://cpwebassets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;</description>
      <category>웹/Vue</category>
      <category>Else</category>
      <category>else if</category>
      <category>for</category>
      <category>form</category>
      <category>hide</category>
      <category>if</category>
      <category>show</category>
      <category>v-mode</category>
      <category>vue</category>
      <category>폼</category>
      <author>SourceTree</author>
      <guid isPermaLink="true">https://easy-coding.tistory.com/123</guid>
      <comments>https://easy-coding.tistory.com/123#entry123comment</comments>
      <pubDate>Fri, 10 Dec 2021 14:44:01 +0900</pubDate>
    </item>
    <item>
      <title>VueJS 정리#1 {{}}, 변수, 함수, 지시문, 이벤트</title>
      <link>https://easy-coding.tistory.com/122</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;VueJS 첫번째 정리입니다.&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;값지정 : &lt;b&gt;{{}}&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;변수 : &lt;b&gt;data&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;함수 : &lt;b&gt;methods&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;지시문(directive) : &lt;b&gt;v-bind&lt;/b&gt;, &lt;b&gt;v-on&lt;/b&gt;, &lt;b&gt;v-once&lt;/b&gt;, &lt;b&gt;v-html&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;이벤트 : &lt;b&gt;v-on:click&lt;/b&gt;,&lt;b&gt; v-on:dblClick&lt;/b&gt;,&lt;b&gt;v-on:mousemove&lt;/b&gt;,&lt;b&gt; v-on:keyup.enter&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;codepen&quot; style=&quot;width: 800px; height: 600px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-height=&quot;1000&quot; data-default-tab=&quot;html,result&quot; data-slug-hash=&quot;rNGxYdQ&quot; data-user=&quot;vskfamnu&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/vskfamnu/pen/rNGxYdQ&quot;&gt; VueJS #1&lt;/a&gt; by 이상섭 (&lt;a href=&quot;https://codepen.io/vskfamnu&quot;&gt;@vskfamnu&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;script src=&quot;https://cpwebassets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;</description>
      <category>웹/Vue</category>
      <category>Event</category>
      <category>HTML</category>
      <category>v-bind</category>
      <category>v-on</category>
      <category>vue</category>
      <category>강좌</category>
      <category>변수</category>
      <category>이벤트</category>
      <category>클릭</category>
      <category>함수</category>
      <author>SourceTree</author>
      <guid isPermaLink="true">https://easy-coding.tistory.com/122</guid>
      <comments>https://easy-coding.tistory.com/122#entry122comment</comments>
      <pubDate>Fri, 10 Dec 2021 14:32:35 +0900</pubDate>
    </item>
    <item>
      <title>C# 가상키보드 띄운 후 위치, 크기 조정하기</title>
      <link>https://easy-coding.tistory.com/121</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;599&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LKMJ9/btrm0q4apSo/8IavbA28bd3dSqfm8v5xNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LKMJ9/btrm0q4apSo/8IavbA28bd3dSqfm8v5xNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LKMJ9/btrm0q4apSo/8IavbA28bd3dSqfm8v5xNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLKMJ9%2Fbtrm0q4apSo%2F8IavbA28bd3dSqfm8v5xNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1023&quot; height=&quot;599&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;599&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;가상키보드 띄운 후 위치, 크기 조정하기&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;윈도우 가상키보드(osk.exe) 띄우기&lt;/li&gt;
&lt;li&gt;윈도우 가상키보드(osk.exe) 위치, 크기 조정하기&lt;/li&gt;
&lt;li&gt;윈도우 가상키보드(osk.exe) 종료하기&lt;/li&gt;
&lt;li&gt;&lt;b&gt;키보드가 없는 터치스크린방식으로 동작할때 해당기능이 꼭 필요합니다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;VKeyboard.cs&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1638692343362&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace formsApp {
    class VKeyboard {
        [DllImport(&quot;User32.DLL&quot;)]
        public static extern Boolean PostMessage(Int32 hWnd, Int32 Msg, Int32 wParam, Int32 lParam);
        public const Int32 WM_USER = 1024;
        public const Int32 WM_CSKEYBOARD = WM_USER + 192;
        public const Int32 WM_CSKEYBOARDMOVE = WM_USER + 193;
        public const Int32 WM_CSKEYBOARDRESIZE = WM_USER + 197;

        static Process keyboardPs = null;

        public static void showKeyboard() {
            if(keyboardPs == null) {
                string filePath;
                if(Environment.Is64BitOperatingSystem) {
                    filePath = Path.Combine(Directory.GetDirectories(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), &quot;winsxs&quot;),
                        &quot;amd64_microsoft-windows-osk_*&quot;)[0],
                        &quot;osk.exe&quot;);
                } else {
                    filePath = @&quot;C:\windows\system32\osk.exe&quot;;
                }
                if(File.Exists(filePath)) {
                    keyboardPs = Process.Start(filePath);
                }
            }
        }
        public static void hideKeyboard() {
            if(keyboardPs != null) {
                keyboardPs.Kill();
                keyboardPs = null;
            }
        }

        public static void moveWindow(int x, int y, int w, int h) {
            if(keyboardPs.Handle != null) {
                PostMessage(keyboardPs.Handle.ToInt32(), WM_CSKEYBOARDMOVE, x, y); // Move to 0, 0
                PostMessage(keyboardPs.Handle.ToInt32(), WM_CSKEYBOARDRESIZE, w, h); // Resize to 600, 300
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사용하기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1638692447927&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//TextBox 진입시에 키보드 띄우고 위치, 크기 상단으로 지정
private void text_Enter(object sender, EventArgs e) {
    VKeyboard.showKeyboard();
    VKeyboard.moveWindow(0, 0, 1024, 350);
}

//TextBox 나갈때 키모드 안보이게 처리
private void text_Leave(object sender, EventArgs e) {
    VKeyboard.hideKeyboard();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; background-color: #f6e199;&quot;&gt;&lt;b&gt;&amp;nbsp;소스 다운&amp;darr;&lt;b&gt;&amp;darr;&lt;/b&gt;&lt;b&gt;&amp;darr;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/rrlm2/btrm7MZrfCw/EWK6hyETd4Kd1dCXCsoEvK/VKeyboard.cs?attach=1&amp;amp;knm=tfile.cs&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;VKeyboard.cs&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>윈폼(Winform)</category>
      <category>C#</category>
      <category>keyboard</category>
      <category>MoveWindow</category>
      <category>PostMessage</category>
      <category>가상키보드</category>
      <category>띄우기</category>
      <category>위치</category>
      <category>이동</category>
      <category>크기</category>
      <category>키보드</category>
      <author>SourceTree</author>
      <guid isPermaLink="true">https://easy-coding.tistory.com/121</guid>
      <comments>https://easy-coding.tistory.com/121#entry121comment</comments>
      <pubDate>Sun, 5 Dec 2021 17:25:12 +0900</pubDate>
    </item>
    <item>
      <title>C# ini 사용하기</title>
      <link>https://easy-coding.tistory.com/120</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;C# ini 사용하기&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;ini 데이터 저장&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;ini 데이터 가져오기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;IniFile 클래스(유틸) 생성&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1638670051825&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System.Runtime.InteropServices;
using System.Text;

namespace formsApp
{
    class IniFile
    {
        [DllImport(&quot;kernel32&quot;)]
        private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
        [DllImport(&quot;kernel32&quot;)]
        private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

        public static void SetValue(string path, string Section, string Key, string Value)
        {
            WritePrivateProfileString(Section, Key, Value, path);
        }

        public static string GetValue(string path, string Section, string Key, string Default)
        {
            StringBuilder temp = new StringBuilder(255);
            int i = GetPrivateProfileString(Section, Key, Default, temp, 255, path);
            if (temp != null &amp;amp;&amp;amp; temp.Length &amp;gt; 0) return temp.ToString();
            else return Default;
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;IniFile 클래스(유틸) 사용&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1638670436185&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//ini파일 경로 지정
String iniPath = Application.StartupPath + @&quot;\config.ini&quot;;

//저장하기
IniFile.SetValue(iniPath, &quot;Public&quot;, &quot;Data1&quot;, &quot;첫번째 데이터&quot;);
IniFile.SetValue(iniPath, &quot;Public&quot;, &quot;Data2&quot;, &quot;두번째 데이터&quot;);
IniFile.SetValue(iniPath, &quot;Private&quot;, &quot;Date1&quot;, &quot;첫 데이터&quot;);

//가져오기
String pubData1 = IniFile.GetValue(iniPath, &quot;Public&quot;, &quot;Data1&quot;, &quot;기본값&quot;);
String pubData2 = IniFile.GetValue(iniPath, &quot;Public&quot;, &quot;Data2&quot;, &quot;기본값&quot;);
String priData1 = IniFile.GetValue(iniPath, &quot;Private&quot;, &quot;Data1&quot;, &quot;기본값&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; background-color: #f3c000;&quot;&gt;&lt;b&gt;&amp;nbsp;소스 다운&amp;darr;&lt;b&gt;&amp;darr;&lt;/b&gt;&lt;b&gt;&amp;darr;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/dcYjkp/btrmZIRxBu3/8bWBL4RzodzcdKIR4tCeD0/IniFile.cs?attach=1&amp;amp;knm=tfile.cs&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;IniFile.cs&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.00MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>윈폼(Winform)</category>
      <category>C#</category>
      <category>dllimport</category>
      <category>get</category>
      <category>GetPrivateProfileString</category>
      <category>ini</category>
      <category>kernel32</category>
      <category>Set</category>
      <category>write</category>
      <category>WritePrivateProfileString</category>
      <author>SourceTree</author>
      <guid isPermaLink="true">https://easy-coding.tistory.com/120</guid>
      <comments>https://easy-coding.tistory.com/120#entry120comment</comments>
      <pubDate>Sun, 5 Dec 2021 11:18:31 +0900</pubDate>
    </item>
    <item>
      <title>Swift Target 13미만 시 UIScene, UISceneConfigration, .. Error</title>
      <link>https://easy-coding.tistory.com/119</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;새로운 프로젝트 생성후 &lt;span style=&quot;color: #ee2323;&quot;&gt;적용 타겟을 13미만&lt;/span&gt;으로 설정시 발행하는 에러를 수정하는 방법입니다.&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;에러내용&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;'ConnectionOptions' is only available in iOS 13.0 or newer&lt;/li&gt;
&lt;li&gt;'UIScene' is only available in iOS 13.0 or newer&lt;/li&gt;
&lt;li&gt;'UISceneConfiguration' is only available in iOS 13.0 or newer&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;AppDelegate.swift 수정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1616934000141&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import UIKit
 
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    //---iOS 13미만 에러 수정------
    var window: UIWindow?
 
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -&amp;gt; Bool {
        // Override point for customization after application launch.
        return true
    }
 
    // MARK: UISceneSession Lifecycle
    //---iOS 13미만 에러 수정------
    @available(iOS 13.0, *)
    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -&amp;gt; UISceneConfiguration {
        // Called when a new scene session is being created.
        // Use this method to select a configuration to create the new scene with.
        return UISceneConfiguration(name: &quot;Default Configuration&quot;, sessionRole: connectingSceneSession.role)
    }
 
    //---iOS 13미만 에러 수정------
    @available(iOS 13.0, *)
    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set&amp;lt;UISceneSession&amp;gt;) {
        // Called when the user discards a scene session.
        // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
        // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;SceneDelegate.swift 수정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1616934027846&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import UIKit
 
//---iOS 13미만 에러 수정------
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
 
    var window: UIWindow?
 
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
        // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
        // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
        guard let _ = (scene as? UIWindowScene) else { return }
    }
 
    func sceneDidDisconnect(_ scene: UIScene) {
        // Called as the scene is being released by the system.
        // This occurs shortly after the scene enters the background, or when its session is discarded.
        // Release any resources associated with this scene that can be re-created the next time the scene connects.
        // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
    }
 
    func sceneDidBecomeActive(_ scene: UIScene) {
        // Called when the scene has moved from an inactive state to an active state.
        // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
    }
 
    func sceneWillResignActive(_ scene: UIScene) {
        // Called when the scene will move from an active state to an inactive state.
        // This may occur due to temporary interruptions (ex. an incoming phone call).
    }
 
    func sceneWillEnterForeground(_ scene: UIScene) {
        // Called as the scene transitions from the background to the foreground.
        // Use this method to undo the changes made on entering the background.
    }
 
    func sceneDidEnterBackground(_ scene: UIScene) {
        // Called as the scene transitions from the foreground to the background.
        // Use this method to save data, release shared resources, and store enough scene-specific state information
        // to restore the scene back to its current state.
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>아이폰</category>
      <category>13.0</category>
      <category>Available</category>
      <category>ConnectionOptions</category>
      <category>error</category>
      <category>is only available in iOS 13.0 or newer</category>
      <category>SceneDelegate</category>
      <category>SWIFT</category>
      <category>TargetTarget</category>
      <category>UIScene</category>
      <category>UISceneConfiguration</category>
      <author>SourceTree</author>
      <guid isPermaLink="true">https://easy-coding.tistory.com/119</guid>
      <comments>https://easy-coding.tistory.com/119#entry119comment</comments>
      <pubDate>Sat, 20 Nov 2021 09:26:09 +0900</pubDate>
    </item>
    <item>
      <title>Javascript 로딩바 동적 생성후 Show/Hide</title>
      <link>https://easy-coding.tistory.com/118</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFm5qV/btrlEt13VND/TmXVI1nEzcdbm1ctILWJm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFm5qV/btrlEt13VND/TmXVI1nEzcdbm1ctILWJm1/img.png&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;443&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFm5qV/btrlEt13VND/TmXVI1nEzcdbm1ctILWJm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFm5qV%2FbtrlEt13VND%2FTmXVI1nEzcdbm1ctILWJm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;507&quot; height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btuSsC/btrlC6td41g/pwhEKGBCOkz3ghrp8cPrE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btuSsC/btrlC6td41g/pwhEKGBCOkz3ghrp8cPrE0/img.png&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;443&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btuSsC/btrlC6td41g/pwhEKGBCOkz3ghrp8cPrE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtuSsC%2FbtrlC6td41g%2FpwhEKGBCOkz3ghrp8cPrE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;507&quot; height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;자바스크립트로 동적으로 로딩바를 Show, Hide하는 예제입니다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1616933484768&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;'use strict';
function Spinner(){
	Spinner.element=document.createElementNS('http://www.w3.org/2000/svg', 'svg');
	let c=document.createElementNS('http://www.w3.org/2000/svg', 'circle');
	Spinner.element.setAttribute('width','50');
	Spinner.element.setAttribute('height','50');	
	c.setAttribute('viewBox','0 0 50 50');
	c.setAttribute('cx','25');
	c.setAttribute('cy','25');
	c.setAttribute('r','21');
	c.setAttribute('stroke-width','8');
	c.setAttribute('stroke','#2196f3');
	c.setAttribute('fill','transparent');
	Spinner.element.appendChild(c);
	Spinner.element.style.cssText='position:absolute;left:calc(50% - 25px);top:calc(50% - 25px)';
	Spinner.element.style.zIndex = 999999;
	document.body.appendChild(Spinner.element);
}
Spinner.id=null;
Spinner.element=null;
Spinner.show=function(){
	if(Spinner.element == null) Spinner();
 
	const c=264,m=15;
	Spinner.element.style.display='block';
	move1();
	function move1(){
		let i=0,o=0;
		move();
		function move(){
			if(i==c)move2();
			else{
				i+=4;o+=8;
				Spinner.element.setAttribute('stroke-dasharray',i+' '+(c-i));
				Spinner.element.setAttribute('stroke-dashoffset',o)
				Spinner.id=setTimeout(move,m)
			}
		}
	}
	function move2(){
		let i=c,o=c*2;
		move();
		function move(){
			if(i==0)move1();
			else{
				i-=4;o+=4;
				Spinner.element.setAttribute('stroke-dasharray',i+' '+(c-i));
				Spinner.element.setAttribute('stroke-dashoffset',o)
				Spinner.id=setTimeout(move,m)
			}
		}
	}
};
Spinner.hide=function(){
	Spinner.element.style.display='none';
	if(Spinner.id){
		clearTimeout(Spinner.id);
		Spinner.id=null
	}
	Spinner.element.setAttribute('stroke-dasharray','0 264');
	Spinner.element.setAttribute('stroke-dashoffset','0')
};


//사용하기 : 로딩바 보이게
Spinner.show();

//사용하기 : 로딩바 안보이게
Spinner.hide();
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>웹/javascript</category>
      <category>dynamic</category>
      <category>javascript</category>
      <category>Loading</category>
      <category>Progress</category>
      <category>Spinner</category>
      <category>동적</category>
      <category>로딩</category>
      <category>로딩바</category>
      <category>스피너</category>
      <category>자바스크립트</category>
      <author>SourceTree</author>
      <guid isPermaLink="true">https://easy-coding.tistory.com/118</guid>
      <comments>https://easy-coding.tistory.com/118#entry118comment</comments>
      <pubDate>Sat, 20 Nov 2021 09:24:56 +0900</pubDate>
    </item>
  </channel>
</rss>