닷넷/WinForms
-
C# 윈폼에 아키텍처 패턴을 적용해보자! (feat. MVP, MVVM)닷넷/WinForms 2024. 2. 22. 22:26
공장에서 윈폼을 하다보면 객체지향 언어인 C#을 절차적인 언어처럼 쓰고, 막 주먹구구식으로 쓰는 경우가 태반일 것이다. 그러다 보면 유지보수가 너어무 힘들어서 윈폼 자체에 노이로제가 걸릴 수도 있다. 그러나! C#의 윈폼도 엄연히 C#의 프레임워크 중 하나인 것 뿐인데, C#은 객체지향 언어인데, 윈폼도 객체지향 적으로 짤 수는 없는 것일까? 수월한 유지보수를 위한 아키텍처 패턴과 디자인 패턴을 적용할 수 없는 것일까? 정답은 가능하다! 객체지향 적으로 짜기 위해 객체지향 설계 5원칙을 따르면 되기는 하나, 통용적인 패턴을 이용하면 보다 쉽게 짤 수가 있다. 여기서는 아키텍처 패턴을 적용 해보는 것에 대해서 설명하고자 한다. 1. 아키텍처 패턴이란? 아키텍처 패턴은 소프트웨어 설계에서 반복적으로 발생하는..
-
C# WinForms DevExpress AccordionControl 사용하기닷넷/WinForms 2023. 8. 23. 11:50
DevExpress의 AccordionControl은 사용자 인터페이스(UI)에서 네비게이션 및 그룹화된 정보를 표시하기 위해 사용되는 강력한 컨트롤입니다. 이 컨트롤은 대시보드, 패널 어플리케이션, 설정 페이지 등에서 유용하게 활용될 수 있습니다. AccordionControl은 주로 다음과 같은 특징을 갖습니다. 1. 그룹화 및 네비게이션: AccordionControl은 요소들을 그룹화하여 각 그룹의 헤더와 본문을 함께 표시합니다. 사용자는 그룹의 헤더를 클릭하거나 펼침/접힘 아이콘을 클릭하여 해당 그룹의 본문을 표시하거나 숨길 수 있습니다. 2. 커스텀 뷰: 각각의 그룹은 커스텀 뷰를 가질 수 있으며, 텍스트, 이미지, 버튼, 그리드 등 다양한 컨트롤을 포함할 수 있습니다. 3. 컨텍스트 버튼: ..
-
C# WinForms DataGridView 복사 후 워드에 저장하기닷넷/WinForms 2023. 3. 21. 17:47
2018.07.20 - [C#/WinForm] - C# DataGridView 엑셀 출력 빠르게 하기 (복사&붙여넣기) C# DataGridView 엑셀 출력 빠르게 하기 (복사&붙여넣기) 이전에 포스팅한 2017/05/24 - [프로그래밍/C#] - C# DataGridView 데이터 엑셀파일에 저장 using oledb 은 데이터그리드뷰의 데이터를 엑셀파일로 출력할 때 속도가 느리다는 단점이 있다. 어떻게 하면 빠르 jasmintime.com 여기서 DataGridView의 데이터를 클립보드에 저장한 걸 응용해서 Word에 붙여넣기하는 방식은 다음과 같습니다. // 데이터그리드뷰 전체 선택 dataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMod..
-
C# WinForms DevExpress CheckedListBoxControl에 바인딩 된 아이템들 중에서 특정 아이템만 체크/미체크 안 되게 비활성화 하는 방법닷넷/WinForms 2023. 2. 24. 18:07
DevExpress의 CheckedListBoxControl에서 아이템들 전체가 선택이 안 되게 하는 방법은 CheckedListBoxControl를 비활성화 시키는 checkedListBoxControl1.Enabled = false; 를 한다. 전체 비활성화가 아닌, 일부 아이템만 선택이 안 되는 비활성화 시키는 방법은 CheckedListBoxControl의 GetItemEnabled 이벤트를 사용하면 된다. CheckedListBoxControl의 아이템들 중에서 특정 항목들만 체크/미체크가 안 되게 비활성화 하는 방법 예제 코드 // CheckedListBoxControl를 사용하는 화면의 소스 코드 파일에서 // CheckedListBoxControl에 데이터소스 바인딩 및 // 이벤트를 통해..
-
C# Winforms 직접 만든 달력 (커스텀 달력)닷넷/WinForms 2023. 1. 13. 10:22
Winforms 기본 도구에 있는 MonthCalendar나 DevExpress의 CalenarControl를 사용하기에는 요즘 트렌드에는 맞지 않는 UX가 있다. 만약 기간에 제한이 있다면 사용자는 한 번 클릭하면 앞 뒤로 가능한 날짜만 선택할 수 있게 하는 것이라던가 한번 클릭 후 다른 날을 클릭 하면 기간 선택이 되게 하는 기능이 기본적으로는 없기 때문이다. 숙박시설 예약이나 항공권 예약할 때 사용는 달력처럼 만들기 위해서 기존 것을 가지고 조금씩 수정하는게 나을 수도 있지만 수정하다보니 한도 끝도 없이 수정을 해야 할 판이어서 아예 직접 만들었다. 직접만든 것이니만큼 버그가 있을 수 있다. 이는 실사용에서 수정해나가면 될 것이다. 참고로 이 달력 코드에는 UserControl를 팝업하는 기능을 L..
-
C# WinForms DevExpress GridControl에 체크박스 칼럼 (헤더 포함) 추가하기닷넷/WinForms 2022. 12. 12. 16:17
2022.08.25 - [프로그래밍/C# (WinForms, ASP.NET)] - C# DevExpress GridControl 열 전체 선택, 헤더에 체크박스 넣는 법 C# DevExpress GridControl 열 전체 선택, 헤더에 체크박스 넣는 법 데브익스프레스 c# Winforms 에서 GridControl의 헤더 체크박는 넣는 방법 아래와 같이 소스파일에 코딩을 한다. #region 체크 박스 그리기 - DrawCheckBox(graphics, rectangle, isChecked) /// /// 체크 박스 그리기 /// jasmintime.com 이전에 쓴 내용이 있는데 이것보다 더 간단한 방법이 존재한다. DevExpress의 GridControl에서 GridView 속성에 이미 존재하는..
-
C# DevExpress GridControl 열 전체 선택, 헤더에 체크박스 넣는 법닷넷/WinForms 2022. 8. 25. 15:58
데브익스프레스 c# Winforms 에서 GridControl의 헤더 체크박는 넣는 방법 아래와 같이 소스파일에 코딩을 한다. #region 체크 박스 그리기 - DrawCheckBox(graphics, rectangle, isChecked) /// /// 체크 박스 그리기 /// /// /// /// 그래픽스 /// /// 사각형 /// /// 체크 여부 protected void DrawCheckBox(Graphics graphics, Rectangle rectangle, bool isChecked) { DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo checkEditViewInfo = this.repositoryItemCheckEdit1.CreateViewI..
-
[WinForms WebBrowser] 자바스크립트에서 C# 메소드를 호출하는 방법닷넷/WinForms 2022. 8. 3. 13:50
namespace WindowsFormsApplication6 { // This first namespace is required for the ComVisible attribute used on the ScriptManager class. using System.Runtime.InteropServices; using System.Windows.Forms; // This is your form. public partial class Form1 : Form { // This nested class must be ComVisible for the JavaScript to be able to call it. [ComVisible(true)] public class ScriptManager { // Variab..
-
C# WebBrowser IE버전 알맞게 변경하는 방법닷넷/WinForms 2022. 8. 3. 13:45
public Form1() { InitializeComponent(); SetBrowserEmulationVersion(); } private const string InternetExplorerRootKey = @"Software\Microsoft\Internet Explorer"; private const string BrowserEmulationKey = InternetExplorerRootKey + @"\Main\FeatureControl\FEATURE_BROWSER_EMULATION"; public enum BrowserEmulationVersion { Default = 0, Version7 = 7000, Version8 = 8000, Version8Standards = 8888, Version..
-
C# WebBrowser 쿠키 삭제 방법닷넷/WinForms 2022. 8. 3. 13:43
public Form1() { InitializeComponent(); //Temporary Internet Files System.Diagnostics.Process.Start("rundll32.exe", "InetCpl.cpl,ClearMyTracksByProcess 8"); //Cookies() System.Diagnostics.Process.Start("rundll32.exe", "InetCpl.cpl,ClearMyTracksByProcess 2"); //History() System.Diagnostics.Process.Start("rundll32.exe", "InetCpl.cpl,ClearMyTracksByProcess 1"); //Form(Data) System.Diagnostics.Proce..
-
C# WinForms DevExpress GridControl multi header (Banded Grid Views)닷넷/WinForms 2022. 3. 21. 14:47
그룹바이를 만드는 것과 별개로 칼럼 헤더들 위에 타이틀 같은 또 하나의 헤더를 두는 방법 데브익스프레스에서는 이 또 하나의 헤더를 band라고 명명되어 있다. 혹은 1. 그리드 컨트롤을 생성한 후, Run Designer 클릭. 2. Change view -> Convert to를 클릭해서 gridView를 BandedGridView로 변경한다. 이렇게 생겼던 그리드 컨트롤이 이렇게 바뀐다. 헤더 위에 Band가 생기는 것이다. 원래 이랬던 디자이너 메뉴에는 Bands가 추가 된다. 3. Columns 메뉴에서 기존에 해왔던 대로 요구사항대로 칼럼들을 추가한다. 4. Bands 메뉴를 클릭하면 처음 생성 시 보이게 되는 화면이다. 5. Band가 여러 개인 경우에는 [Add New Band...]을 클릭..
-
C# WinForms에서 레이아웃 깨지는 문제 해결 방법. 디스플레이 해상도, 텍스트 배율 안 따라게 하기닷넷/WinForms 2022. 2. 22. 17:37
사용자들이 윈폼에서 레이아웃이 깨진다고 표현하는 현상은 사용자의 디스플레이 상태가 개발 환경과 다른 경우 종종 일어날 수 있는 일이다. 해상도에 따라서 레이아웃이 깨진다면, Form 속성에 AutoScaleMode를 이용하면 깨지지 않게 할 수 있다. AutoScaleMode에서 Inherit은 클래스의 부모 확장 모드에 따라 배율을 제어한다. 부모가 없는 경우 자동 스케일링이 비활성화된다. 즉, 부모 폼이 있다면 자식 폼이 부모 폼의 AutoScaleMode를 따라간다. Font는 클래스가 사용하고 있는 글꼴의 치수에 상대적인 축척(일반적으로 시스템 글꼴)을 제어한다. 윈폼에서 AutoScaleMode는 기본적으로 Font로 설정되어 있어서 개발 도중에도 폰트를 바꾼다거나 크기를 바꾸게 되면 이에 따라..
-
C# WinForms DevExpress SearchLookupEdit에서 그리드 뷰 설정하기닷넷/WinForms 2021. 11. 11. 15:35
데브익스프레스에서 SearchLookupEdit의 데이터소스에 테이블 클래스 리스트를 그대로 넣으면 아래 사진과 같이 그 목록들이 그대로 나온다. 이 목록들을 수정하려면 어떻게 해야 될까? SearchLooupEdit은 콤보박스가 아니다. 따라서 위 상태에서 원하는 칼럼만 나오게 하려고, ComboBox에 있는 DisplayMember와 ValueMember를 찾을 필요는 없다. GridControl처럼 SearchLookupEdit도 디자이너 속성에서 설정하면 된다. GridControl에서는 Run Designer를 통해 들어갔다면, SearchLookupEdit은 Design View를 통해 들어간다. 그리드 디자이너 창에서 Columns 탭을 통해 그리드 뷰를 설정하면 된다. 원하는 칼럼 갯수에 ..
-
C# ChromiumWebBrowser에서 JavaScript 함수 호출과 웹에서 C# 메소드 호출하는 방법닷넷/WinForms 2021. 8. 3. 17:58
C# 윈폼에는 기본 웹브라우저 컨트롤이 있지만 스크립트 오류가 빈번해서 프로젝트의 닷넷프레임워크 버전을 4.6 이상으로 구성할 수 있다면 크로미움웹브라우저를 사용하는 것이 매우매우 좋다. 앞서 ChromiumWebBrowser를 사용하려면 NuGet 패키지 관리에서 cefsharp를 검색한 다음 CefSharp.WinForms를 설치하면 된다. 설치가 끝나면 도구상자에 CefSharp이 자동으로 추가가 되었을 경우 도구상자에서 ChromiumWebBrowser 컨트롤을 폼 디자인에 드래그앤 드랍해서 사용한다. 도구상자에 자동으로 추가가 되지 않았다면 다음과 같이 코드로 폼에 크로미움웹브라우저 컨트롤을 추가한다. public Form1() { InitializeComponent(); InitializeCh..
-
C# WinForms DevExpress GridControl 체크박스칼럼에서 체크한 것이 고정이 안 될 때, When the check is not fixed in the check column닷넷/WinForms 2021. 7. 7. 11:00
DevExpress의 GridControl에서 칼럼 하나를 체크박스칼럼으로 만들고, 칼럼의 UnboundType을 Bound로 설정하고, FieldName이 checkcolumn이라고 하면 gridControl.DataSource = list 일때, list.checkcolumn이 있으면 bound 된 값대로 false 혹은 true를 가지게 되어 2021.06.14 - [프로그래밍/C# (WinForms, ASP.NET)] - DevExpress GridControl에서 셀 편집(SetRowCellValue)이 되지 않을 때, 체크가 안 될 때 등 앞서 포스팅 한대로 설정했다는 가정하에 체크박스칼럼의 셀에서 체크박스에 체크하면 체크하는 대로 체크를 하지 않으면 하지 않은대로 설정 된다. 그런데 바운드 ..