패키지 설치 없이 사용할 수 있는 간편한 디자인. 

 

 

1. 

Button일 경우 padding이 안먹히는데. 
ContentPresenter 속성의 margin으로 하면 내부컨텐츠를 움직일 수 있다. 
https://stackoverflow.com/questions/48804439/to-set-padding-for-textblock-inside-contentpresenter

 

To set padding for textblock inside ContentPresenter

<ControlTemplate TargetType="TabItem"> <Border x:Name="Border" Margin="{TemplateBinding Margin}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{

stackoverflow.com

 

 

2. 아주 기본 아이콘 

https://learn.microsoft.com/en-us/windows/apps/design/style/segoe-ui-symbol-font

 

Segoe MDL2 Assets icons - Windows apps

This article lists and provides usage guidance for the glyphs that come with the Segoe MDL2 Assets font.

learn.microsoft.com

 

사용 방법(wpf용)

<TextBlock FontFamily="Segoe MDL2 Assets" Text="&#xE760;" FontSize="32"/>

 

 

 

 

 

3. 이건 xml은 아니고  html, css 이뻐서 들고옴. 코드를 볼 수 있어서 참조용

https://www.frontendplanet.com/css-pagination-examples/

 

31 CSS Pagination Examples

 

www.frontendplanet.com

 

 

 

 

 

 

visual studio에서 Application already started 
프로젝트 복사 후 이름도 변경하고, 어셈블리 이름도 변경했는데 
왜 에러가 날까?

mutex 이름도 달라야한다.
나는 mutexName으로 되어있었다. 

ViewLoading.xaml.cs에 mutex가 존재했다. 

 

 

 

 

그냥 기본 설치시, Visual Studio에서 코드 내에서 Color 변경을 할 수 없다. 

추가적으로 설치를 해야한다. 아래에 방법을 적어 보았다.

 


 

Visual Studio Extension 사용 (Color Picker)

Visual Studio의 확장 기능을 설치하여 색상 선택기 개선.

Color Picker와 같은 확장 기능을 사용하면 더 직관적인 색상 선택기 도구를 제공 받음.

  1. 확장 기능 설치
    • Visual Studio에서 상단에 Extensions(확장) 메뉴를 열고, Manage Extensions(확장관리)를 선택.
    •  Color Picker와 같은 확장을 검색하여 설치 선택.
    • 모든 Visual Studio 관련 프로그램을 끄면 설치가 시작되고, Color Picker 도구를 사용할 수 있는 기능을 활성화 됨.

1, 2

 

 

색상 코드 아래에 색선이 생겼고, 그것을 선택하면, 왼쪽같은 창이 나온다. 

A라는 알파 (투명도)를 선택할 수 있어서 정말 편리하다. 

 

먼저 나의 스펙을 말하자면, 대학 시절 성적은 나쁘지 않았고 수상 경력과 논문도 있었지만, 특별히 내세울 만한 건 없었다.

  1. 토익은 발바닥 수준.
  2. 정보처리기사도 못 땄다.

이런 상태에서 멀티캠퍼스에서 Java 백엔드 교육을 들었다(온라인).

하지만 솔직히, 멍 때리고 놓치면 하루 종일 헤매는 정도였고, 나에게 큰 도움이 되지 않았다.

6개월의 교육이 끝났지만, 결국 CURD 정도만 할 줄 아는 백엔드 개발자로 느껴졌다. 그 이상은 없었다.

 

 

 

교육이 끝난 후,

자소서를 쓰다가 답이 없길래 대충 30군데 정도 이력서를 넣었다.

기대도 안 했는데, 4군데에서 연락이 왔다. 처음에는 Java 관련 회사에만 지원하다가,

찾아보니 C#, WPF라는 분야도 있다는 걸 알게 되었다.

 

악명 높은 제조업 분야였다. 인터넷에서 "제조업 가면 안 된다", "공장에서 산다"는 말들이 많았다. 그래도 면접을 보러 갔다.

면접에서는 지식 위주로 질문을 받았고, 결국 합격했다.

(c#,wpf 2곳을 봤는데 남은 한곳은 술이 필수이며, 공장에서 살아야한다! 라고 했....음;; 요즘 시대에?)

 

 

현재 상황을 정리하자면:

C#은 백엔드, WPF는 프론트엔드였다!

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

그냥 웹과 비슷하게 윈도우 프로그램을 만든다고 생각하면 된다. 웹을 해봤다면 쉬울 수도 있다(내 경험상 그렇다).

 

기계 자동화 기술과 PLC(Programmable Logic Controller) 관련 지식이 필요하긴 하지만,

나는 그쪽을 직접 다루지 않는다.

 

회사에서 이미 만들어둔 코드를 복사해 약간 수정하는 수준이다.

코드를 복사하면서 이해하고, 약간의 변형을 주는 정도다.

 

아직 공장 현장에 직접 간 적은 없고,

상사분들도 많아야 일주일에 1~2번 가는 정도다.

주로 프로젝트 마무리나 설치할 때 현장에 가는 것 같다.

(그렇다고 공장에 길어야 4시간 정도고 하루종일 있지 않다)

주로 회사에서 코딩한다. 

 

아직 현장 경험은 없지만, 지금까지는 회사 생활에 만족하고 있다.

칼퇴! 칼퇴! 땡하면 집가!!!!

회식도 나의 환영회 말고는 없었다! 


 

역시 인터넷 세상을 믿을게 못되는 것 같다. 

직접 해보지 않으면 모르는 것들이 너무나 많다. 

다른점도 너무나 많고, 

비행기는 매번 탈때마다 느낌이 다르고, 해외에서 악명 높은 비행기 '라이언에어'도 타봤지만 

나는 세상에서 가장 침대같은 느낌의 착륙느낌이었다. (처음 느껴보는! )

셀프체크인할때도 직원분이 코리아 좋다면서 웃으면서 말걸어주기도 하였다!

 

 

이렇게 매 시기마다 후기는 달라진다. 

세상에 얼마나 많은 중소기업이 있는데!

 

 

 

'중소벤처기업부' 사이트를 보면 다음과 같이 말한다. 

 

 

2023년 기준, 한국에는 약 700만 개의 중소기업이 있습니다.
중소기업은 전체 기업 수의 99% 이상을 차지하며, 전체 고용의 약 **80%**를 담당하고 있습니다.

https://www.mss.go.kr/site/eng/02/20202000000002019110610.jsp

 

Ministry of SMEs and Startups

SMEs play an important role in Korean Economy. According to business statistics, SMEs take up ninety-nine percent of number of enterprises, eighty-three percent of total employment, thirty-four percent of export.

www.mss.go.kr

 

 

고작 인터넷의 안좋은 글만 보고, 대기업을 못가는 사람들이 중소기업을 쳐다도 안보고

집에서만 있는 행위는 멈추기 바란다. 

 

공부도 하기 싫은 데 취직 공부한다는 다짐만하고 아무것도 안할 바에는 좋은 중소기업가서 편하게 일하고 1년에 3천만원이라는 돈을 버는게 나에게는 최선이라는 것이다. 

 

 

[문제]

mssql에서 중국에 저장할려고 하는데, 

愛你愛你愛你라는 글자가  愛?愛?愛? 이런식으로 저장이 된다. 

 

 

 

[해결 방법] 

愛你愛你愛你 와 같은 문자열을 삽입하려면 따옴표를 적절하게 이스케이프해야 합니다.

1. 문자열 앞에 N을 붙여서 Unicode 문자를 사용

2. 문자열 내의 단일 인용부호는 두 개의 단일 인용부호로 변경

나는 1번 2번 둘다 해서 해결했다. 

 

 


 

 

 

[예시]

1.  문자열 앞에 N을 붙여서 Unicode 문자를 사용

string.Format("insert into 테이블명(id, one) values('{0}', 'N{1}'))", ID, ONE);

 

INSERT INTO YourTable (YourColumn)
VALUES (N' 愛你愛你愛你 ')  이런식으로 되겠다. 

 

 

2. 문자열 내의 단일 인용부호는 두 개의 단일 인용부호로 변경

sQuery = string.Format("insert into 테이블명(id, one) values('{0}', 'N{1}'))", ID, ONE.Replace("'", "''"));

해당 변수뒤에 .Replace("'", "''") 을 붙여주면 되는데... 

 

Replace(" ' ", " ' ' ") 이런 것이다. 

' 하나를 '' 2개로 해주면 해결된다?!

 

 

 

단일 인용 부호(')를 두 개의 단일 인용 부호('')로 바꾸는 이유는 SQL 인젝션 공격을 방지하고 문자열을 올바르게 처리하기 위함.

즉,  

 

  • SQL 인젝션 공격 방지: 사용자 입력을 안전하게 처리하여 악의적인 코드 실행을 방지합니다.
  • 문자열 이스케이프 처리: SQL 쿼리에서 문자열을 올바르게 처리하여 구문 오류를 방지합니다.

 

 

 

XML이란?

XML(Extensible Markup Language)는 데이터 저장 및 전송을 위한 마크업 언어입니다.

XML은 주로 데이터 구조를 정의하고 정보를 계층적으로 표현하는 데 사용됩니다.

 

 

XML의 기본 구조

XML 문서는 다음과 같은 기본 구성 요소로 이루어져 있습니다:

  1. 선언:
    • XML 문서의 시작 부분에 XML 선언이 포함됩니다. 예: <?xml version="1.0" encoding="UTF-8"?>
  2. 루트 요소:
    • XML 문서는 단 하나의 루트 요소(root element)를 가져야 합니다. 모든 다른 요소는 이 루트 요소의 하위 요소가 됩니다.
  3. 요소(Elements):
    • 요소는 XML 문서의 기본 단위로, 시작 태그와 종료 태그로 구성됩니다. 예: <element>Content</element>
  4. 속성(Attributes):
    • 요소는 추가 정보를 제공하는 속성을 가질 수 있습니다. 속성은 시작 태그 내에 정의됩니다. 예: <element id="1">Content</element>
  5. 텍스트 콘텐츠:
    • 요소는 데이터를 담고 있는 텍스트 콘텐츠를 포함할 수 있습니다. 요소는 텍스트, 다른 요소, 또는 두 가지를 모두 포함할 수 있습니다.

 

[예시코드]

<?xml version="1.0" encoding="UTF-8"?>
<Library>
    <Book id="1">
        <Title>Effective C#</Title>
        <Author>Bill Wagner</Author>
        <Year>2019</Year>
    </Book>
    <Book id="2">
        <Title>Learning XML</Title>
        <Author>Erik T. Ray</Author>
        <Year>2003</Year>
    </Book>
</Library>

 

  • 루트 요소: <Library>
  • 하위 요소: <Book>, <Title>, <Author>, <Year>
  • 속성: <Book id="1">에서 id 속성

 

 

XML의 장점

  1. 가독성: XML은 텍스트 기반으로, 사람이 읽고 이해하기 쉽습니다.
  2. 확장성: 새로운 데이터 구조를 쉽게 추가할 수 있습니다.
  3. 표준화: 다양한 플랫폼과 언어에서 지원됩니다.

 

 


 

 

 

 

 

이 함수는 화면의 버튼을 클릭하면 작동하는 함수이다. 

코드에 주석으로 아주 자세히 작성해였다. 

 private void btn_Add_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
 {
     try
     { 
		// 파일 열기 대화상자를 생성
         OpenFileDialog dlg = new OpenFileDialog();

		// 사용자가 파일을 선택했는지 확인
         if(dlg.ShowDialog() == DialogResult.OK)
         {
         	 // XML 문서를 로드하기 위한 XmlDocument 객체 생성
             XmlDocument doc = new XmlDocument();
             // 사용자가 선택한 XML 파일을 로드
             doc.Load(dlg.FileName);

             // XML 내의 모든 Message 노드를 가져오기
             // XPath 쿼리를 사용하여 A아래의 B노드들을 선택
             XmlNodeList messageNodes = doc.SelectNodes("/A/B");

             foreach (XmlNode messageNode in messageNodes)
             {
                 // <B> 노드의 id 속성 값
                 string messageId = messageNode.Attributes["id"].Value;

                 // <B> 하위의 <one>, <two>, <three> 값 추출
                 string ONE = messageNode.SelectSingleNode("one")?.InnerText.Trim();
                 string TWO = messageNode.SelectSingleNode("two")?.InnerText.Trim();
                 string THREE = messageNode.SelectSingleNode("three")?.InnerText.Trim();                         
				 
                 // 데이터베이스에 메시지를 저장하는 메서드 호출
                 this.{db 불러오는 형식}.(messageId, ONE, TWO, THREE);
             }
         }
     }
     catch(Exception ex)
     { 
     }
 }

 

 

 

 

별도로 체크해야할 것

 

 

1. .XML의 구조


<?xml version="1.0"?>
  <!-- ================================================================ -->
  <!--                             정보                       -->
  <!--                             정보~               -->
  <!-- ================================================================ -->
<A> 
  <B id="WHAT">
    <one> information </one >
    <two> information </two >
    <three> information  </three >
  </B>

  <B id="how">   
    <one> information </one >
    <two> information </two >
    <three> information </three >
  </B>
</A>

 

 

2. db 연결 부분 

{} 안의 내용을 각자 개별적으로 알아서 수정해야한다. 

(물론 {}도 나중에 삭제해야함!)

 

 

 

 

 

 

[ 문제 ]

DevExpress WPF Charts에서 

일, 주 일때는 그래프가 잘 보이는데, 

달(month)일때는 실같이 얇~게 보여서 엥엥엥 하루종일 찾아봤는데 결국 못찾음......

그 후 시간이 흘러 ......

 

 

 

 

이것도 안됨..

                //for (int i = 0; i < 4; i++)
                //{
                //    var series = new BarStackedSeries2D();
                //    series.BarWidth = 1;  
                //    this.cht_Main.Series.Add(series);
                //}

 

 

chat gpt는 다음과 같이 알려줌.. (이건 걍 안됨)

axisy.wholerange.setminmaxvalues(0, 30);

 

 

 

 

 

[해결방법]

아래와 같이 하면 된다.!

https://docs.devexpress.com/WPF/115179/controls-and-libraries/charts-suite/chart-control/axes/axis-scale-types

   this.cht_Main.AxisX.DateTimeScaleOptions = new ManualDateTimeScaleOptions()
   {
       MeasureUnit =DevExpress.Xpf.Charts.DateTimeMeasureUnit.Month
   };

 

 

 

 

 

 

각 용어들의 큰 틀은
많은 용어가 있지만 크게 3단계(레벨)로 나눌수 있다.

 

 

1. Planning & Management (계획 및 관리)

 제조 공정의 전략적 목표 설정, 자원 배분, 그리고 전체적인 비즈니스 계획과 관련된 시스템들을 포함합니다.

  • ERP (Enterprise Resource Planning)
    • 역할 : 비즈니스의 모든 자원을 통합하여 계획하고 관리합니다. 재무, 인적 자원, 공급망, 물류 등의 데이터를 통합해 조직 전체의 효율성을 높입니다.
    •  상호작용 : MES와 연결되어 생산 계획과 자재 관리가 실시간으로 반영되며, SCM과도 협력하여 전체 공급망의 최적화를 지원합니다.
  • SCM (Supply Chain Management):
    • 역할 : 공급망 전체를 관리하며, 자재 수급, 생산 계획, 유통 등을 조율합니다.
    • 상호작용 :  ERP와의 통합을 통해 수요 예측과 재고 관리를 최적화하고, MES에 생산 계획을 전달합니다.
  • CRM (Customer Relationship Management):.
    • 역할 : 고객 관리와 판매를 지원하며, 고객의 요구와 피드백을 생산 및 품질 관리에 반영합니다
    • 상호작용: ERP와 통합되어 고객의 주문 및 서비스 데이터를 관리하며, 생산 계획에 영향을 미칩니다.
  • PDM / PLM (Product Data Management / Product Lifecycle Management)
    • 역할: 제품의 설계, 개발, 생산, 폐기까지 전 과정을 관리하며, 제품 데이터와 설계 정보를 통합 관리합니다.
    • 상호작용: MES와 연결되어 설계 변경 사항이 생산 공정에 즉시 반영됩니다.

2. Production & Execution (생산 및 실행)

 실제 생산 활동을 관리하고 실행하는 시스템들을 포함합니다.

  • MES (Manufacturing Execution System):
    • 역할: 생산 공정을 관리하고, 생산 일정, 품질 관리, 작업자 할당 등을 실시간으로 제어합니다.
    • 상호작용: ERP와의 통합을 통해 생산 계획을 실행하며, CMS와 FMS로부터 데이터를 수집하여 생산 현황을 모니터링하고 제어합니다.

 

3. Monitoring & Control (모니터링 및 제어)

 실시간으로 생산 현황을 모니터링하고, 필요한 경우 제어를 통해 생산 품질을 유지하는 시스템들을 포함합니다.

  • CMS (Control & Monitoring System): (중간역할)
    • 역할: 생산 현장의 설비와 공정을 실시간으로 모니터링하고 제어하여, 생산의 일관성과 품질을 유지합니다.
    • 상호작용: MES에 실시간 데이터를 제공하며, 문제가 발생하면 즉시 조치를 취합니다.
  • FMS (Flexible Manufacturing System):
    • 역할: 다양한 제품을 유연하게 생산할 수 있는 시스템으로, 자동화된 생산 설비를 통해 빠르게 생산을 전환합니다.
    • 상호작용: MES와 연결되어 생산 요구에 맞게 자동으로 작업을 조정하고 실행합니다.
  • TCS (Tool Control System):
    • 역할: 생산에 사용되는 도구와 장비를 관리하고 제어합니다.
    • 상호작용: CMS와 연결되어 도구 상태와 사용을 모니터링하며, MES에 데이터를 전달합니다.
  • OEE (Overall Equipment Effectiveness):
    • 역할: 설비의 효율성과 생산성을 측정하는 지표로, 가동 시간, 성능, 품질 등을 평가합니다.
    • 상호작용: CMS와 MES의 데이터를 활용하여 OEE를 계산하고, ERP에 보고합니다.
  • RDS (Remote Diagnosis System):
    • 역할: 원격으로 장비의 상태를 모니터링하고 진단하여, 문제 발생 시 신속하게 대응할 수 있도록 지원합니다.
    • 상호작용: CMS와 연결되어 장비의 이상 상태를 진단하고, 필요한 조치를 취합니다.

 

 

 

이해가 안가죠?
쉽게 말하면

 

 

3. Monitoring & Control (모니터링 및 제어) 에서 

공장 설비가 가동될때 실시간으로 전산화된 데이터를 수집한다. 에러, 재고..등등 모든 것을. 

FMS는 자동화 기능, CMS는 생산 관련을 전산화한것. TCS는 도구,장비를 전산화 한것

OEE, RDS는 설비, 장비의 상태나 최대생산량을 수치화한 것. 

 

이를 CMS가 통합하여 모든 것을 모니터링 한다. 

이후 CMS가 MES에서 보내고  1(SCM,ERP..) 과 관련된 것들이 MES 에게 지시를 한다. 

 

    이때, CMS 와 MES가 차이가 안나는 것 같아 보이는데, 예를 들어보면

CMS가 장비의 상태나 성능 데이터를 수집하여 MES에 제공하면, MES는 이 데이터를 기반으로 생산 계획을 조정하거나 작업 지시를 수정할 수 있습니다.

CMS는 단순히 공장의 모든 것을 데이터를 전산화 한것 기록일뿐이다.

MES는 모든 내용을 바탕으로 어떠한 지시나 계획을 조정하는 역할을 한다. 

그림과 같이 다른 분류이다.  

 

(왜 이렇게 구분한 건지는 난 모른다. 그저 이미 나누어 두었다는 것… ㅜ.ㅜ)

ERP와 MES의 차이점은 

MES는 모~든 것의 과정또한 알고 있다.(구동 과정 중 에러의 정확한 원인)

하지만 ERP는 ‘결과’만 가지고 있기에 다르다. (에러 80% - 이유는 모름.)

 

(왜 통합해서 관리 안하는 거지; 이유가 있었겠지)

 

물론 회사 마다 조금씩 서로의 개념에 침범하는 경우도 있을 수도 있다.

 


 

 

그러다가 또 의문 왜 이렇게 프로그램을 사용하는 걸까??

 

전산화한다는게 무슨 말이지? 라는 의문이 들 수 도 있다. 

전산화수작업으로 수행되던 작업을 컴퓨터와 소프트웨어를 활용하여 자동화하고 효율적으로 관리하는 과정 

이를 통해 데이터의 수집, 저장, 처리, 분석을 더 빠르고 정확하게 가능.

 

기존의 작업 방식:

  • 수기 기록: ‘종이’에 직접 작성하거나 ‘엑셀’ 파일을 사용하여 데이터를 수집. 이는 데이터의 누락, 오류, 일관성 문제
  • 비효율적인 정보 접근: 필요한 정보나 기록을 찾기 위해 수많은 폴더를 검색해야 했으며, 많은 시간이 소모
  • 기계 에러 관리의 어려움: 기계의 상태나 에러를 실시간으로 모니터링하기 어려워, 문제가 발생했을 때 대응 늦음.

 

 

스마트 팩토리는 이러한 문제를 해결하기 위해 PLC (Programmable Logic Controller)와 같은 자동화 기술을 활용하여 기계와 프로그램을 연결하고, 실시간으로 데이터를 관리하는 시스템.

 

자동화: PLC와 같은 자동화 장치를 통해 생산 공정을 제어하고, 기계와 시스템의 상태를 실시간 모니터링

실시간 데이터 수집 및 분석: 센서와 IoT(Internet of Things) 기술을 활용하여 데이터를 실시간으로 수집하고, 이를 기반으로 분석하여 의사 결정을 지원

통합된 시스템 관리: ERP, MES, SCM 등의 시스템과 통합하여 생산 계획, 재고 관리, 품질 관리 등 모든 부문을 효율적 관리

문제 예방 및 유연한 대응: 실시간 모니터링과 예측 분석을 통해 문제를 사전에 인식 및 대응 가능

 

스마트 팩토리의 이점

  • 생산성 향상: 자동화된 공정과 효율적인 자원 관리로 생산성을 높임
  • 품질 개선: 실시간 모니터링과 데이터 분석을 통해 품질 문제를 사전에 식별하고 수정 가능
  • 비용 절감: 에너지 사용, 자원 낭비를 최소화, 인건비와 유지보수 비용을 절감
  • 유연성 및 적시성: 다양한 제품을 유연하게 생산할 수 있으며, 변화하는 시장 요구에 신속하게 대응함
  • 데이터 기반 의사 결정: 데이터 분석을 통해 informed decision을 내리고, 공정의 최적화와 예측적 유지 보수를 지원

 

 

 

 

 

 

1. .xaml에 ComboBox를 추가한다. 

<ComboBox x:Name="cbb_{변수명}" SelectedValuePath="Key" DisplayMemberPath="Value" />

SelectedValuePath는 선택되는 항목을 아래(2)에서 보이듯이 

dicTemp의 Key값을 보일 것인지, Value값을 보일 것인지 정한다. 

보통 저렇게 지정하는 것 같다.

 

만약 여기서 지정하기 싫다면 

.cs 파일 내에서 이렇게 지정해 줄수도 있다. 

 

   this.cbb_{변수명}.SelectedValuePath = "Key";
   this.cbb_{변수명}.DisplayMemberPath = "Value";

 

 

 

2-0. chat gpt에 물어보니 

   public class 함수명   
      {
          public string Key { get; set; }
          public clsEnum.{Values} Value { get; set; }
          public 함수명(clsEnum.{Values} Key, string value)   생성자
          {
	       Key = key;	
              Value = value;
              
          }
          public override string ToString()
          {
              return Value;   ComboBox에 표시할 텍스트
          }
      }

이런식으로 사용하라는데;;

그냥  Dictionary<string, string> dicTemp = new Dictionary<string, string>(); 이거쓰면 한 줄에 가능. 

 

 

 

 

2. .cs에

Startprocess()부분에 

Dictionary<string, string> dicTemp = new Dictionary<string, string>();

this.cbb_{comboBox명}.SelectionChanged -= Cbb_{comboBox명}_SelectionChanged;
dicTemp.Clear();
dicTemp.Add( .Tostring(), "전체");
dicTemp.Add( .Tostring(), "전체");
dicTemp.Add( .Tostring(), "전체");
this.cbb_{comboBox명}.ItemsSource = new BindingSource(dicTemp, null);
this.cbb_{comboBox명}.SelectedIndex = 0;
this.cbb_{comboBox명}.SelectionChanged += Cbb_{comboBox명}_SelectionChanged;

 

dicTemp에 값들을 넣어준다. 

bindingSource를 해야 값이 들어간다. 

 

 Dictionary<string, string> dicTemp = new Dictionary<string, string>(); 은 

 Dictionary<int, string> dicTemp = new Dictionary<int, string>(); 

이렇게 구성할 수 도 있고, 저장한 데이터 타입에 따라 변경하면 된다. 

 

[ dicTemp의 것을 활용하는 방법 ]

this.{comboBox명}.SelectedItem == null  //dic로 담긴게 있는지
this.{comboBox명}.SelectedValue.Tostring()
(int)this.{comboBox명}.SelectedValue  //dic의 value값(앞인지, 뒤인지 잘모르겠음 아직도)

 

 

 

 


 

 

+ ComboBox의 - PopUp class의 Placement 

Popup이 화면에 표시될 위치를 결정하는 데 사용된다. 

 

  • Absolute: 기준 요소와 무관하게 화면의 절대 좌표를 기준으로 위치를 지정합니다.
  • Relative: 기준 요소의 좌측 상단 모서리를 기준으로 상대적인 위치를 지정합니다.
  • Bottom: 기준 요소의 아래쪽에 Popup을 표시합니다.
  • Center: 기준 요소의 중심에 Popup을 표시합니다.
  • Right: 기준 요소의 오른쪽에 Popup을 표시합니다.
  • AbsolutePoint: 기준 요소와 무관하게 화면의 절대 좌표를 기준으로 위치를 지정합니다. HorizontalOffset와 VerticalOffset 속성을 사용하여 조정할 수 있습니다.
  • RelativePoint: 기준 요소의 좌측 상단 모서리를 기준으로 상대적인 위치를 지정합니다. HorizontalOffset와 VerticalOffset 속성을 사용하여 조정할 수 있습니다.
  • Mouse: 마우스 커서 위치를 기준으로 Popup을 표시합니다. (ComboBox 중 클릭한 위치에!)
  • MousePoint: 마우스 커서 위치를 기준으로 Popup을 표시하고, HorizontalOffset와 VerticalOffset 속성을 사용하여 조정할 수 있습니다.
  • Left: 기준 요소의 왼쪽에 Popup을 표시합니다.
  • Top: 기준 요소의 위쪽에 Popup을 표시합니다.

사용 방법

<ComboBox x:Name="cbb_{변수명}" SelectedValuePath="Key" DisplayMemberPath="Value">
    <ComboBox.Template>
         <ControlTemplate TargetType="ComboBox">
             <Grid>
                 <ToggleButton Name="ToggleButton"
                       Grid.Column="2"
                       Template="{StaticResource ComboBoxToggleButton}" 
                       Focusable="false"
                       IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
                       ClickMode="Press">
                 </ToggleButton>
                 <ContentPresenter Name="ContentSite"
                           IsHitTestVisible="False"
                           Content="{TemplateBinding SelectionBoxItem}"
                           ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
                           ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
                           Margin="3,3,23,3"
                           VerticalAlignment="Center"
                           HorizontalAlignment="Left">
                 </ContentPresenter>                                
                 <Popup Name="Popup"
                Placement="MousePoint"
                IsOpen="{TemplateBinding IsDropDownOpen}"
                AllowsTransparency="True"
                Focusable="False"
                PopupAnimation="Slide">
                     <Grid Name="DropDown"
                   SnapsToDevicePixels="True"
                   MinWidth="{TemplateBinding ActualWidth}"
                   MaxHeight="{TemplateBinding MaxDropDownHeight}">
                         <Border Name="DropDownBorder"
                         BorderThickness="1"
                         Background="LightBlue">
                             <ScrollViewer Margin="4,6,4,6"
                                   SnapsToDevicePixels="True">
                                 <StackPanel IsItemsHost="True"
                                     KeyboardNavigation.DirectionalNavigation="Contained" />
                             </ScrollViewer>
                         </Border>
                     </Grid>
                 </Popup>
             </Grid>
         </ControlTemplate>
     </ComboBox.Template>
</ComboBox>

 

 

<ComboBox> 안에 추가한다.   

<Popup> 라인을 보면 된다. - Placement 속성을 수정하면되는데, 생략하면 유동적으로 생성된다. 

 

 

1. 디버그 관련

코드 실행 중 이전으로 돌아가고 싶다면 
해당 줄을 우클릭 후 '다음 문 설정'을 클릭하고 F10 누르면 다시 갈 수 있다. 

 

2. 매개변수 전달

에러가 날때 주는 변수의 타입과 받는 쪽의 매개변수 타입이 맞는지 확인해보자!

 

3. itemsource 반복현

itemsource 쓰니까 값들이 반복되서 여러번 나오게 된느 이유는?
 AutoGenerateColumns="False" 
이게 true 였어서;;

 

4. DB 조건 없애는 방법

where ({0}=ALL || {컬럼명}={0}) 

+ Recent posts