.NET Core로 진행할 때 프로젝트 출력 형식을 콘솔 애플리케이션(Console Application)으로 설정해도 

Console 창이 나타나지 않아 불편함이 있었습니다.

 

 

 

이를 해결하기 위해서 프로젝트 파일(.csproj)을 메모장으로 열어 PropertyGroup 안에 다음을 넣어줍니다


    <DisableWinExeOutputInference>true</DisableWinExeOutputInference>

 

 

그러면 아래처럼 작성됩니다.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <UseWPF>true</UseWPF>
    <DisableWinExeOutputInference>true</DisableWinExeOutputInference>
  </PropertyGroup>
  
  .
  .
  .
  
</Project>

 

 

그리고 앱을 실행하면 콘솔창이 나타나는 것을 볼 수 있습니다.

 

출처

.NET 5 / Windows Forms에서 Console창이 뜨지 않는 경우 - 👨‍🏫 튜토리얼, 팁, 강좌 - 닷넷데브 (dotnetdev.kr)

반응형

c# Winform MSChart를 사용하다가

 

파일에서 데이터를 불러와 표현 할 때 기존의 데이터 스케일이 너무 커서

새로 불러들인 데이터의 스케일이 작게 나타나 보이는 현상이 발생하였다.

첫 파일 불러오기
두 번째 파일 불러오기 - 기존 Scale을 유지하여 데이터를 파악 할 수 없다.

이를 자동으로 영역을 재 설정 하기 위해서는 다음과 같은 코드가 필요하다

chart.ChartAreas[0].AxisY.Maximum = Double.NaN;
chart.ChartAreas[0].AxisY.Minimum = Double.NaN;
chart.ChartAreas[0].RecalculateAxesScale();

 

위 코드를 삽입 후 데이터를 확인하면 아래와 같이 영역이 재 설정 되는 것을 확인 할 수 있다.

두 번째 파일 불러오기 - 영역이 재 설정 되었다.

 

 

 

출처

.net - How do I force a chart to auto adjust Y Axis Maximum? - Stack Overflow

반응형

MSChart 확장 라이브러리에 MSChart Extension 이 있다.

이 라이브러리를 사용하면 Zoom과 Pan, Cursor 기능을 쉽게 사용할 수 있다.

 

GitHub - Code-Artist/MSChartExtension: Windows Forms MSChart Extensions Method

 

GitHub - Code-Artist/MSChartExtension: Windows Forms MSChart Extensions Method

Windows Forms MSChart Extensions Method. Contribute to Code-Artist/MSChartExtension development by creating an account on GitHub.

github.com

 

이 라이브러리를 사용중에 Cursor를 프로그램적으로 지우고 싶었는데 아무리 해도 지울 수 있는 방법이 없었다.

 

Cursor

 

라이브러리를 분석해보니까 ClearCursor1() 메소드가 있었다.

그런데 접근한정자가 private인 것이다..

 

MSChartExtension Library의 일부

 

메소드 안을 보니 RemoveAnnotation을 하는 것이다.

 

그래서 chart의 Annotations 속성을 보니 Count가 4개가 있었다.

{chartAreaName}Cursor_1X

{chartAreaName}Cursor_1Y

{chartAreaName}cursor1_Label_BG

{chartAreaName}cursor1_Label

 

 

 

이 네개의 Annotation을 RemoveAnnotation을 호출하여 제거하도록 하였다.

chartMain.RemoveAnnotation(chartMain.ChartAreas[0].Name + "Cursor_1X");
chartMain.RemoveAnnotation(chartMain.ChartAreas[0].Name + "Cursor_1Y");
chartMain.RemoveAnnotation(chartMain.ChartAreas[0].Name + "cursor1_Label");
chartMain.RemoveAnnotation(chartMain.ChartAreas[0].Name + "cursor1_Label_BG");

 

 

그랬더니 잘 지워진다.

 

반응형

VS 버전: 2013

 

        private void NumberTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if(!(char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back)))    
            {
                e.Handled = true;
            }
        }

 

목표

숫자만 입력받는 TextBox 유저 컨드롤 만들기

 

 

프로젝트->추가->사용자 정의 컨트롤을 클릭하여 생성합니다. 저는 NumberTextBox.cs라고 적겠습니다.

 


추가된 NumberTextBox.cs 에 코드를 보기 위해서 NumberTextBox를 더블 클릭합니다.

 

그러면 코드는 다음과 같이 작성되어 있습니다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Signal_processing
{
    public partial class NumberTextBox : UserControl
    {
        public NumberTextBox()
        {
            InitializeComponent();
        }
    }
}

 

저는 TextBox를 그대로 가져와서 숫자만 입력되도록 이벤트를 추가할 것이기 때문에

 

아래와 같이 UserControl을 TextBox로 수정합니다.

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Signal_processing
{
    public partial class NumberTextBox : TextBox
    {
        public NumberTextBox()
        {
            InitializeComponent();
        }
    }
}

 

이제 NumberTextBox.cs를 더블클릭하면 다음과 같은 에러를 보게 됩니다.

 

 

 

.Designer.cs 줄: 32 열: 1이라는 메세지를 클릭하여 오류가 난 위치로 이동합니다.

다음과 같이 this.AutoScaleMode에 빨간줄이 그어져 있습니다. 

이것은 UserControl 클래스에서는 있었던 속성이 TextBox로 바꾸면서 이 속성이 없어서 나타난 오류입니다.

 

이 줄을 지워줍니다.

 

 

 

[이벤트 추가]

NumberTextBox.cs 열면 속성창에 NumberTextBox의 속성이 나타납니다.

번개 아이콘을 클릭하여 이벤트 속성으로 변경하고

KeyPress 영역을 더블클릭 하여 해당 이벤트가 자동생성되도록 합니다.

 

 

그러면 아래와 같이 NumberTextBox_KeyPress 함수가 생성됩니다.

 

 

다음과 같이 함수 안에 로직을 작성하면 완료됩니다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Signal_processing
{
    public partial class NumberTextBox : TextBox
    {
        public NumberTextBox()
        {
            InitializeComponent();
        }

        private void NumberTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            //숫자와 백스페이스를 제외한 나머지를 바로 처리
            if(!(char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back)))    
            {
                e.Handled = true;
            }
        }
    }
}

 

 

이제 컴파일 한번 하면 구성 요소에 NumberTextBox가 나타나는것을 확인 할 수 있습니다.

 

 

 

 

Reference

[C#]TextBox에 숫자만 입력받기 (tistory.com)

반응형

실시간으로 데이터를 수집하여 DataGridView에 데이터를 나타내기 위해 데이터를 추가할 때 점점 갈 수록

속도가 오래걸리는 현상을 발견했습니다. (1400개 이상 데이터)

 

Column 수가 많아 DataGridView의 영역이 벗어날 때 

데이터를 추가할 때마다 DataGridView를 벗어난 영역이 깜빡이는 것을 확인 할 수 있었습니다.

이 때문에 점점 느려진다고 판단하였습니다.

 

 

이를 해결하기 위해서는 DataGridView에 더블버퍼를 설정해야합니다.

 

설정하는 방법은 아래 포스팅을 참조해주세요.

[C#] - [C#, DataGridView] 데이터 추가시 DataGridView 깜빡임 문제 해결

 

더블버퍼를 설정하면 데이터 양이 많아질 수록 속도가 안 느려지는 것은 아니지만, 

훨씬 개선된 것을 느낄 수 있습니다.

 

 

출처: https://stackoverflow.com/questions/10226992/slow-performance-in-populating-datagridview-with-large-data

반응형

DataGridView에 source를 등록 후 

새로운 row나 값을 추가 할 때 DataGridView가 깜빡이는 현상을 볼 수 있습니다.

 

이것을 해결하기 위해서 더블버퍼를 설정 해 주어야 합니다.

 

 


   

using System.Reflection;


public partial class Form1 : Form
{
   ...
   
   
  ...


  private void Init_DataGridView()
  {
    dataGridView1.DoubleBuffered(true);
  }
}

public static class ExtensionMethods 
{ 
  public static void DoubleBuffered(this DataGridView dgv, bool setting) 
  { 
    Type dgvType = dgv.GetType(); 
    PropertyInfo pi = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic); 
    pi.SetValue(dgv, setting, null); 
  } 
}

 

 

출처: https://stackoverflow.com/questions/41893708/how-to-prevent-datagridview-from-flickering-when-scrolling-horizontally

반응형

+ Recent posts