C#
-
C# 계산오류? 부동 소수점에 대해 알아보자닷넷/C# 2023. 3. 2. 15:57
최근에 닷넷 오픈모임방에서 질문이 하나 올라왔다. [????] [오후 5:53] C#에서 100-63.1 하면 36.9라는 결과가 나오는데 [????] [오후 5:53] 100-64.1을 하면 35.900000000000006 라는 결과가 출력됩니다 [????] [오후 5:53] 이유가 뭔지 알 수 있을까요? [????] [오후 5:53] 사진 [????] [오후 5:54] 제 PC가 이상한걸까요.. 아님 원래 그런걸까요.. 이렇게 나오는 원인은 근사치로 계산 되는 부동 소수점 때문이다. 100-64.1부터 근사치가 되는 이유는? 64.1은 십진수에서는 정확한 수이지만, 이진수에서는 정확하게 표현할 수 없는 수이다. 따라서 부동 소수점으로 표현할 때 근사치가 된다. 즉, 64.1을 이진수로 변환하면 10..
-
C# WinForms DevExpress CheckedListBoxControl에 바인딩 된 아이템들 중에서 특정 아이템만 체크/미체크 안 되게 비활성화 하는 방법닷넷/WinForms 2023. 2. 24. 18:07
DevExpress의 CheckedListBoxControl에서 아이템들 전체가 선택이 안 되게 하는 방법은 CheckedListBoxControl를 비활성화 시키는 checkedListBoxControl1.Enabled = false; 를 한다. 전체 비활성화가 아닌, 일부 아이템만 선택이 안 되는 비활성화 시키는 방법은 CheckedListBoxControl의 GetItemEnabled 이벤트를 사용하면 된다. CheckedListBoxControl의 아이템들 중에서 특정 항목들만 체크/미체크가 안 되게 비활성화 하는 방법 예제 코드 // CheckedListBoxControl를 사용하는 화면의 소스 코드 파일에서 // CheckedListBoxControl에 데이터소스 바인딩 및 // 이벤트를 통해..
-
아무리 구글링을 해도 관련 글을 찾을 수가 없어서 ChatGPT를 사용해 보았다. 비주얼 스튜디오에서 Any CPU로 빌드를 했을 때 실행파일 타입은 32비트로 나온다면 64비트로 작동하는 게 맞을까?끄적이는/정보공유-IT 2023. 2. 2. 12:05
회사에서 32비트 프로젝트를 64비트로 전환을 하는 중에 클라이언트 중에 32비트 PC가 있을 수도 있으니 32비트용, 64비트용 두 가지로 나누는 건 복잡해진다고 Any CPU로 하라고 전달을 받았다. Windows 10 64비트 컴퓨터에 있는 비주얼 스튜디오에서 Any CPU로 빌드를 했을 때 실행파일 타입이 32비트로 나온다면 64비트로 작동하는 게 맞을까? 64비트로 전환 할 때 Any CPU로 하지 않은 이유 중에 하나였다. 그동안 이 궁금증은 묻어만 두고 있다가 요근래 구글링을 해 보았지만 엉뚱한 결과물들만 나올 뿐이었다. 그래서 요새 유명해지고 있는 ChatGPT에 드디어 가입을 한 후 사용해보았다. 사용방법은 간단했다. https://chat.openai.com/chat 에서 로그인 혹은 ..
-
CefSharp 런타임 에러가 발생 하는 이유, Any CPU로 했을 때도 문제 없이 되게 하는 방법끄적이는/정보공유-IT 2023. 2. 1. 14:05
비주얼 스튜디오에서 C# Winform 프로젝트를 예로 들면, 프로젝트에 웹브라우저를 크로미움으로 쓴다면 누겟에서 CefSharp 패키지를 설치하는 것은 필연적으로 해야 하는 일이다. 그렇게 프로젝트에 CefSharp 관련 라이브러리들을 사용한 코드들을 완성하고 빌드를 하려고 하는데 빌드가 되지 않거나 런타임 에러가 발생하는 경우가 있다. 에러 메시지는 다음과 같이 두 가지 중에 하나가 나올 것이다. System.IO.FileNotFoundException: '파일이나 어셈블리 'CefSharp.Core.Runtime, Version=96.0.180.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할..
-
C# URL 파라미터 인코딩 방법 (특수문자가 있는 경우에 사용)닷넷/C# 2022. 10. 19. 16:14
2018.10.30 - [프로그래밍/C# (WinForms, ASP.NET)] - C# URL에 들어가는 한글 UTF-8 Encoding private string GetData() { string result = string.Empty; string url = "https://api.com?value="; string value = "[value]"; // 인코딩하는 방법 string valueEncoding = System.Web.HttpUtility.UrlEncode(value); // 인코딩한 내용을 디코딩하는 방법 string valueDecoding = System.Web.HttpUtility.UrlDecode(valueEncoding); HttpWebRequest request = (Http..
-
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에서 레이아웃 깨지는 문제 해결 방법. 디스플레이 해상도, 텍스트 배율 안 따라게 하기닷넷/WinForms 2022. 2. 22. 17:37
사용자들이 윈폼에서 레이아웃이 깨진다고 표현하는 현상은 사용자의 디스플레이 상태가 개발 환경과 다른 경우 종종 일어날 수 있는 일이다. 해상도에 따라서 레이아웃이 깨진다면, Form 속성에 AutoScaleMode를 이용하면 깨지지 않게 할 수 있다. AutoScaleMode에서 Inherit은 클래스의 부모 확장 모드에 따라 배율을 제어한다. 부모가 없는 경우 자동 스케일링이 비활성화된다. 즉, 부모 폼이 있다면 자식 폼이 부모 폼의 AutoScaleMode를 따라간다. Font는 클래스가 사용하고 있는 글꼴의 치수에 상대적인 축척(일반적으로 시스템 글꼴)을 제어한다. 윈폼에서 AutoScaleMode는 기본적으로 Font로 설정되어 있어서 개발 도중에도 폰트를 바꾼다거나 크기를 바꾸게 되면 이에 따라..
-
c# 부팅시 자동 시작하는 프로그램, 레지스트리에 등록 또는 삭제 방법닷넷/C# 2021. 11. 30. 11:12
PC가 부팅이 된 후에 사용자가 어떠한 작업을 하지 않아도 바로 프로그램이 실행되게 설정하는 방법으로 이전에 쓴 글이 있는데 이 작업을 코드로 작성하기에는 어려운 부분이 있다. 2018.03.20 - [끄적이는/정보공유] - 윈도우 컴퓨터 시작시 *.exe 프로그램이 자동으로 실행되게 하는 방법 레지스트리 경로 SOFTWARE\Microsoft\Windows\CurrentVersion\Run 가 부팅 시 자동실행이 되는 프로그램들을 관리하는 경로이기 때문에 이 경로에 해당 실행파일을 등록 하거나 삭제하면 되므로 레지스트리에 등록하거나 삭제하는 방법은 코드로 작성하기 쉽다. C#에서 레지스트리 자동실행 경로에 프로그램을 등록하는 방법은 다음과 같다. private void SaveAutoExe() { //..
-
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# 두 위도와 경도 좌표 사이의 거리를 계산 하는 방법닷넷/C# 2021. 7. 19. 16:34
c#에서 두 위도와 경도 좌표 사이의 거리를 계산 하는 방법은 다음과 같다. 첫 번째 방법, NuGet 패키지에서 NEST를 설치한다. 설치 후 다음과 같이 코드를 작성한다. 참고로 단위는 미터이다. // c#에서 두 위도와 경도 좌표 사이의 거리를 계산 하는 첫 번째 방법 GeoCoordinate pin1 = new GeoCoordinate(lat1, lng1); GeoCoordinate pin2 = new GeoCoordinate(lat2, lng2); double distanceBetween = pin1.GetDistanceTo(pin2); 단, 이 방법은 닷넷프레임워크 버전을 타기 때문에 설치가 안 되는 경우 두 번째 방법을 사용하면 된다. 두 번째 방법, NEST가 설치 되지 않는 경우 다음의 ..
-
C# A리스트에서 B리스트에 있는 것을 제외하는 방법(LINQ)닷넷/C# 2021. 7. 13. 11:34
다음은 C#에서 LINQ를 활용하여 A리스트에서 B리스트에 있는 것을 제외하는 방법이다. 수학적 표현으로는 차집합이다. List list = listA.Where(x=> !listB.Select(y=> y.id).Contains(x.id)).ToList(); 이것을 반대로 하면 A리스트에서 B리스트에 있는 것만, 교집합이 된다. List list = listA.Where(x=> listB.Select(y=> y.id).Contains(x.id)).ToList(); 그 외에도 Except, Any, SequenceEqual 등을 이용한 방법이 있으며 다음의 사이트에서 확인할 수 있다. C# 두 개의 List를 비교하는 가장 빠른 방법 c# — 두 개의 List 를 비교하는 가장 빠른 방법 두 가지 대규모 ..