규칙적인 라벨 label1 ~ label9

반복문으로 값 넣기

 

for (int i = 1; i < 10; i++)  
            {
                Label lblZiNum = (Controls.Find("lblZiNum" + i.ToString(), true)[0] as Label);


                 blZiNum.Text = i.ToString();  
            }

 

 

※ 라벨뿐만 아니라 다른 컨트롤도 가능

 

public enum num
        {
            一 = 1,
            二 = 2,
            三 = 3,
            四 = 4,
            五 = 5,
            六 = 6,
            七 = 7,
            八 = 8,
            九 = 9,
            十 = 10
        }

int inputNum = 3;

string test = Enum.GetName(typeof(num), inputNum)

 

예) string test = Enum.GetName(typeof(num), 3)  

 - Console.WriteLine(test);    =>    "三";

 

텍스트 박스에 입력 시 숫자와 백스페이스만 입력되도록 하는 코드입니다.

 

if (!(char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back)))
{
        e.Handled = true;
}

이벤트가 발생한 현재 컨트롤의 이름 가져오기

 

private void txtbox_KeyDown(object sender, KeyEventArgs e)
{
        string ctrlName = ((TextBox)sender).Name;
}

SendKeys.SendWait("ABCDE");

 

활성화된 다른 창이나 다른 어플리케이션 텍스트박스에 키 입력을 보내고 싶을때 Sendkeys를 사용한다.

 

키값 종류

 

백스페이스
{BACKSPACE} {BS} 또는 {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL 또는 삭제 {DELETE} 또는 {DEL}
아래쪽 화살표 {DOWN}
END {END}
ENTER {ENTER} 또는 ~
Esc 키 {ESC}
도움말 {HELP}
홈 {HOME}
INS 또는 INSERT {INSERT} or {INS}
왼쪽 화살표 {LEFT}
NUM LOCK {NUMLOCK}
Page Down {PGDN}
Page Up {PGUP}
화면 인쇄 {PRTSC} (나중에 사용할 예약 됨).
오른쪽 화살표 {RIGHT}
스크롤 잠금 {SCROLLLOCK}
Tab 키 {탭}
위쪽 화살표 {UP}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}
F16 {F16}
키패드 추가 {ADD}
키패드 빼기 {SUBTRACT}
키패드 곱하기 {MULTIPLY}
키패드 나누기 {DIVIDE}
SHIFT, CTRL 및 ALT 키의 조합이와 결합 된 키를 지정 하려면 다음 코드 중 하나 이상과 키 코드를 앞에 있습니다.

Key 코드
SHIFT 키 +
CTRL ^
ALT 키 %

특문과 합쳐서 쓸때는
Ctrl + C = "^C"
Ctrl + V = "^V"
Ctrl + Alt + Enter = "^%{ENTER}"

 

X, Y 좌표값을 얻기 위해 만든 Form

 

타이머는 System.Windows.Forms.Timer 를 사용했습니다.

 

체크박스에 체크를 하면 timer가 동작되고 

스페이스바 키를 눌렀을때

체크박스의 체크가 해제되면서

timer가 정지됩니다.

 

체크를 하면 X, Y 좌표값을 실시간으로 가져온다.

 

public partial class Form1 : Form
    {
        [DllImport("user32.dll")]
        static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, int dwExtraInfo);

        private const uint MOUSEEVENTF_LEFTDOWN = 0x0000; //= 0x0002;      // The left button is down.
        private const uint MOUSEEVENTF_LEFTUP = 0x0000;// = 0x0004;        // The left button is up.

        public Form1()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            lbX1.Text = Cursor.Position.X.ToString();
            lbY1.Text = Cursor.Position.Y.ToString();
        }

        private void btnStop1_Click(object sender, EventArgs e)
        {
            timer1.Stop();
        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Space)
            {
                if (cbP1.Checked)
                {
                    btnStop1.PerformClick();
                    cbP1.Checked = false;
                }
            }
        }

        private void cbP1_CheckedChanged(object sender, EventArgs e)
        {
            if(cbP1.Checked)
            {
                timer1.Start();
                this.ActiveControl = null;

            }
        }

 

윈폼으로 개발하다가 간혹 Key_Down 이벤트가 작동하지 않을때가 있다.
키보드 메시지를 다른 컨트롤이 먼저 받아서 처리해버려서 
폼의 이벤트 핸들러는 해당 메시지를 받지 못하기 때문이다.
이런 경우 KeyPreview 속성을 true로 설정함으로써, 해당 폼의 이벤트 핸들러가 해당 메시지를 먼저 
처리하도록해서 해결할 수 있다.

 

this.KeyPreview = true;

 

 

 

CheckForIllegalCrossThreadCalls = false;

 

어디까지나 임시방편 


결국에는 invoke 또는  BackgroundWorker를 사용해서 수정해야함.

오픈소스 사용함

 

URL: https://github.com/Enichan/Ini

 

GitHub - Enichan/Ini: Ini file reader/writer for C# / .NET written in pure .NET in a single source file

Ini file reader/writer for C# / .NET written in pure .NET in a single source file - GitHub - Enichan/Ini: Ini file reader/writer for C# / .NET written in pure .NET in a single source file

github.com

 

 

Ini.cs
0.03MB

 

Kernel32를 사용하지 않고 cs파일 하나만 추가해서 매우 간단하고 직관적으로 코딩할수 있다.

 

 

            // ini 쓰기
            IniFile ini = new IniFile();
            ini["Setting"]["USE_FLAG"] = "true";
            ini["Setting"]["Delay_Time"] = "10";
            ini["INPUT_DATA"]["TEXT1"] = "DATA1";
            ini.Save("C:\\Setting.ini");
 
            // ini 읽기
            ini.Load("C:\\Setting.ini");
            string useflag = ini["Setting"]["USE_FLAG"].ToString();
            string delay_time = ini["Setting"]["Delay_Time"].ToString();
            string textdata1 = ini["INPUT_DATA"]["TEXT1"].ToString();

 

진짜 많이 검색해보고 나름대로 가장 심플하면서 확실한 방법을 찾은거같아서 글을 작성합니다.

 

그냥 Excel.EXE 프로세스를 죽이게 되면 다른 실행되있는 엑셀파일도 전부 날아가기때문에

 

엑셀의 PID(Process ID)를 획득 후 해당 ID에 대해서만 Kill하게 됩니다.

 

예제)

    class Program
    {
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

        static void Main(string[] args)
        {
            Microsoft.Office.Interop.Excel.Application excel = null;
            Workbook workbook = null;
            Worksheet worksheet = null;
            uint processId = 0;

            excel = new Microsoft.Office.Interop.Excel.Application();
            // 엑셀 내용 Start
                      º
                      º
                      º  
                      º
                      º
            // 엑셀 내용 End
            
            GetWindowThreadProcessId(new IntPtr(excel.Hwnd), out processId); //PID 획득
            workbook .Save();       
            workbook.Close(Type.Missing, Type.Missing, Type.Missing);     
            excel.Quit();

            if (processId != 0)
            {
                System.Diagnostics.Process excelProcess = System.Diagnostics.Process.GetProcessById((int)processId);
                excelProcess.CloseMainWindow();
                excelProcess.Refresh();
                excelProcess.Kill();
            }
        }
    }

 

'Programing > C#' 카테고리의 다른 글

C# 디버깅시 Cross Thread 임시 해결방법  (0) 2022.05.09
C# ini 파일 읽기 쓰기  (0) 2022.04.22
C# Excel 프로세스 해제  (0) 2022.03.12
C# LOG파일 생성  (0) 2022.03.12
C# CrossThread Error 해결  (0) 2022.02.21

+ Recent posts