private void DataGridView_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
   
var grid = sender as DataGridView;
   
var rowIdx = (e.RowIndex + 1).ToString();

   
var centerFormat = new StringFormat()
   
{
       
// right alignment might actually make more sense for numbers
       
Alignment = StringAlignment.Center,
       
LineAlignment = StringAlignment.Center
   
};

   
var headerBounds = new Rectangle(e.RowBounds.Left, e.RowBounds.Top, grid.RowHeadersWidth, e.RowBounds.Height);
    e
.Graphics.DrawString(rowIdx, this.Font, SystemBrushes.ControlText, headerBounds, centerFormat);
}

 

위 방법이 제일 깔끔하게 표현이 되는것 같다.

https://github.com/ProfessionalCSharp

 

깃헙을 최초에 만들때

username 을 잘못만들었다.;;

영어 순서가 뒤바뀌어 발음도 힘든 username 이 탄생되었다;;

방법은 깃헙에서 우측 상단의 내메뉴에서 Settings 로 진입한다.

여기에서 Account Change username 의 Change username 버튼을 클릭한다.

 

아래 처럼 경고 문장이 뜬다

이전에 사용했던 경로를 자동으로 연동해 주지 않고

연결되었던 프로젝트도 다시 연결을 해주어야한다.

바꿀 username 을 적는다.

혹 'Login is already taken' 이라는 메세지가 뜬다면 이미 사용중인 username 이므로 다른 username 으로 변경해야한다.

변경완료 까지는 조금 시간이 걸린다.

변경이 완료되었다.

 

아래 내용은 DataGridView 의 row 를 마우스 드래그로 이동 시킬수 있는 코드입니다.

단, 직접 DataGridView 에 데이터를 작성해야 합니다. (아래 코드참고)

DataSource 에 데이터를 넣으면 에러가 발생됩니다.

            dataGridView.ColumnCount = 2;

            dataGridView.Columns[0].Name = "First";
            dataGridView.Columns[1].Name = "Last";
            dataGridView.Columns["First"].HeaderText = "First Name";
            dataGridView.Columns["Last"].HeaderText = "Last Name";
            dataGridView.Columns["First"].SortMode = DataGridViewColumnSortMode.Programmatic;
            dataGridView.Columns["Last"].SortMode = DataGridViewColumnSortMode.Programmatic;

            dataGridView.Rows.Add(new string[] { "공사명", "땡땡대학교 복도" });
            dataGridView.Rows.Add(new string[] { "공종", "토공" });
            dataGridView.Rows.Add(new string[] { "위치", "자재배송" });
            dataGridView.Rows.Add(new string[] { "내용", "노상다짐. 검측" });
            dataGridView.Rows.Add(new string[] { "일자", "2013.07" });

먼저 DataGridView 에 아래 처럼 이벤트를 먹이고 AllowDrop 을 True 합니다.

            this.dataGridView.MouseMove += dataGridView_MouseMove;
            this.dataGridView.MouseDown += dataGridView_MouseDown;
            this.dataGridView.DragOver += dataGridView_DragOver;
            this.dataGridView.DragDrop += dataGridView_DragDrop;
            this.dataGridView.AllowDrop = true;

그리고 아래 처럼 각 이벤트에 아래 처럼 코딩하면 row 를 이동시킬 수 있습니다.

        private Rectangle dragBoxFromMouseDown;
        private int rowIndexFromMouseDown;
        private int rowIndexOfItemUnderMouseToDrop;
        private void dataGridView_MouseMove(object sender, MouseEventArgs e)
        {
            if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
            {
                if (dragBoxFromMouseDown != Rectangle.Empty &&
                    !dragBoxFromMouseDown.Contains(e.X, e.Y))
                {

                    DragDropEffects dropEffect = dataGridView.DoDragDrop(dataGridView.Rows[rowIndexFromMouseDown], DragDropEffects.Move);
                }
            }
        }
        private void dataGridView_MouseDown(object sender, MouseEventArgs e)
        {
            rowIndexFromMouseDown = dataGridView.HitTest(e.X, e.Y).RowIndex;
            if (rowIndexFromMouseDown != -1)
            {
                Size dragSize = SystemInformation.DragSize;

                dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width / 2), e.Y - (dragSize.Height / 2)), dragSize);
            }
            else
                 dragBoxFromMouseDown = Rectangle.Empty;
        }
        private void dataGridView_DragOver(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }
        private void dataGridView_DragDrop(object sender, DragEventArgs e)
        {
 
            Point clientPoint = dataGridView.PointToClient(new Point(e.X, e.Y));

            rowIndexOfItemUnderMouseToDrop = dataGridView.HitTest(clientPoint.X, clientPoint.Y).RowIndex;

            if (e.Effect == DragDropEffects.Move)
            {
                DataGridViewRow rowToMove = e.Data.GetData(typeof(DataGridViewRow)) as DataGridViewRow;
                dataGridView.Rows.RemoveAt(rowIndexFromMouseDown);
                dataGridView.Rows.Insert(rowIndexOfItemUnderMouseToDrop, rowToMove);
            }
        }

1.       

        private Bitmap ConvertDataGridViewToBmp1(DataGridView dg)
        {
            int height = dg.Height;
            dg.Height = dg.RowCount * dg.RowTemplate.Height;

            Bitmap bitmap = new Bitmap(dg.Width, dg.Height);
            dg.DrawToBitmap(bitmap, new Rectangle(0, 0, dg.Width, dg.Height));

            dg.Height = height;

            return bitmap;
        }

 

2.

        [DllImport("gdi32.dll", ExactSpelling = true, CharSet = CharSet.Auto, SetLastError = true)]
        private static extern bool BitBlt(IntPtr pHdc, int iX, int iY, int iWidth, int iHeight, IntPtr pHdcSource, int iXSource, int iYSource, System.Int32 dw);
        private const int src = 0xCC0020;

        private Bitmap ConvertDataGridViewToBmp2(DataGridView dg)
        {
            this.dataGridView.ColumnHeadersVisible = false;
            this.dataGridView.RowHeadersVisible = false;

            dg.Refresh();
            dg.Select();

            Graphics g = dg.CreateGraphics();
            Bitmap bitmap = new Bitmap(dg.ClientSize.Width, dg.ClientSize.Height, g);
            Graphics g = Graphics.FromImage(bitmap);
            IntPtr bitmapHoc = g.GetHdc();
            IntPtr gHoc = g.GetHdc();

            BitBlt(bitmapHoc, 0, 0, dg.ClientSize.Width, dg.ClientSize.Height, gHoc, 0, 0, src);

            g.ReleaseHdc(gHoc);

            g.ReleaseHdc(bitmapHoc);

            return bitmap;
        }

가끔 코드를 가져다 쓸때 빈 줄이 너무 많아 코드 정리 할때

일일히 지우기가 힘들때가 있다.

아래처럼 찾아바꾸기 할때 (Ctrl+ Shift + H)

정규식을 사용하여 제거 하면 한번에 제거할 수 있다.

 

^(?([^\r\n])\s)*\r?$\r?\n

 

반드시 찾는 위치를 현재 문서로 해야한다

전체 솔루션을 하게되면 assembly 파일과 designer 등 자동으로 생성된 코드까지 다 제거해 버린다.

 

추가..

 

참고 링크 :

https://www.c-sharpcorner.com/blogs/how-to-remove-blank-lines-in-visual-studio1

https://www.codeproject.com/Articles/1087859/Web-crawling-with-Csharp-part-one

 

HTTPClientThread.zip

MVCSimpleServerApp.zip

 

            ProcessStartInfo startInfo = new ProcessStartInfo(filePath);
            startInfo.Verb = "edit";

            Process.Start(startInfo);

 

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

Visual Studio 2017 에서 코드상의 빈 줄 제거 하기  (0) 2018.04.24
Web crawling with C#  (0) 2018.04.17
(C#) 그림판 실행하기  (0) 2018.03.22
(C#) png 파일을 ico 파일로 만들기  (0) 2018.03.21
Win API  (0) 2018.03.18
FileSystemWatcher (폴더 모니터링 기능)  (3) 2018.03.15

png 파일을 ico 파일로 만들때가 많아졌다;

아래 코드를 이용해 윈폼프로그램 하나 만들어서 사용중..

Image image = Bitmap.FromFile(path);
String fileName = Path.ChangeExtension(path, "ico");
Stream IconStream = System.IO.File.OpenWrite(fileName);

Bitmap bitmap = new Bitmap(image);
bitmap.SetResolution(64, 64);
Icon icon = System.Drawing.Icon.FromHandle(bitmap.GetHicon());
icon.Save(IconStream);
IconStream.Close();

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

Web crawling with C#  (0) 2018.04.17
(C#) 그림판 실행하기  (0) 2018.03.22
(C#) png 파일을 ico 파일로 만들기  (0) 2018.03.21
Win API  (0) 2018.03.18
FileSystemWatcher (폴더 모니터링 기능)  (3) 2018.03.15
(C#) 나만의 커서(Cursor) 만들기  (0) 2018.03.06

Windows API 에 대한 내용이 있는 사이트

확장 툴로도 제공한다.

https://www.pinvoke.net/

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

(C#) 그림판 실행하기  (0) 2018.03.22
(C#) png 파일을 ico 파일로 만들기  (0) 2018.03.21
Win API  (0) 2018.03.18
FileSystemWatcher (폴더 모니터링 기능)  (3) 2018.03.15
(C#) 나만의 커서(Cursor) 만들기  (0) 2018.03.06
(C#) 방화벽 뚫기 코드  (0) 2018.03.03

+ Recent posts