private UInt64 reverseValue(UInt64 val)
{
        UInt64 ret = 0;
        for (int i = 0; i < 64; i++)
        {
             ret |= (val & 1) << (63 - i);
             val >>= 1;
        }
        return ret;
}

 

64, 63을 32, 31로 바꾸면 32bit도 되고 암튼 그렇습니당

 

 

1. 리스트뷰 OwnerDraw = true로 변경 (View는 Details)

2. 전체 소스코드

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

namespace myPractice
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            drawListView();
        }
        private void drawListView()
        {
            listView1.CheckBoxes = true;
            ListViewItem lvi1 = new ListViewItem(); lvi1.SubItems.Add("aaa"); lvi1.SubItems.Add("bbb");
            ListViewItem lvi2 = new ListViewItem(); lvi2.SubItems.Add("ccc"); lvi2.SubItems.Add("ddd");
            ListViewItem lvi3 = new ListViewItem(); lvi3.SubItems.Add("eee"); lvi3.SubItems.Add("fff");
            listView1.Items.Add(lvi1);
            listView1.Items.Add(lvi2);
            listView1.Items.Add(lvi3);
            ColumnHeader columnHeader_check = new System.Windows.Forms.ColumnHeader();
            ColumnHeader columnHeader_1 = new System.Windows.Forms.ColumnHeader();
            ColumnHeader columnHeader_2 = new System.Windows.Forms.ColumnHeader();
            columnHeader_1.Text = "항목1";
            columnHeader_1.Width = 200;
            columnHeader_2.Text = "항목2";
            columnHeader_2.Width = 200;

            listView1.DrawColumnHeader += new DrawListViewColumnHeaderEventHandler(drawListColumnHeader);
            listView1.DrawItem += new DrawListViewItemEventHandler(lv_DrawItem);
            listView1.DrawSubItem += new DrawListViewSubItemEventHandler(lv_DrawSubItem);
            listView1.ColumnClick += new ColumnClickEventHandler(lv_ColumnClick);

            listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
                                                        columnHeader_check, columnHeader_1, columnHeader_2});
        }
        private void drawListColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
        {
            if (e.ColumnIndex == 0)
            {
                e.DrawBackground();
                bool value = false;
                try
                {
                    value = Convert.ToBoolean(e.Header.Tag);
                }
                catch (Exception)
                {
                }
                CheckBoxRenderer.DrawCheckBox(e.Graphics, new Point(e.Bounds.Left + 4, e.Bounds.Top + 4),
                    value ? System.Windows.Forms.VisualStyles.CheckBoxState.CheckedNormal :
                    System.Windows.Forms.VisualStyles.CheckBoxState.UncheckedNormal);
            }
            else e.DrawDefault = true;
        }
        private void lv_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            if (e.Column == 0)
            {
                bool value = false;
                try
                {
                    value = Convert.ToBoolean(this.listView1.Columns[e.Column].Tag);
                }
                catch (Exception)
                {
                }
                this.listView1.Columns[e.Column].Tag = !value;
                foreach (ListViewItem item in this.listView1.Items) item.Checked = !value;
                this.listView1.Invalidate();
            }
        }
        private void lv_DrawItem(object sender, DrawListViewItemEventArgs e)
        {
            e.DrawDefault = true;
        }
        private void lv_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
        {
            e.DrawDefault = true;
        }
    }

}

 

 

 

 

컬럼헤더를 직접 만들어야합니다.

컬럼헤더 만들때, 맨 앞 컬럼헤더면 체크박스를 추가해야하기때문에

컬럼헤더 만드는 listView.DrawColumnHeader함수를 직접 만든 함수로 추가해야합니다

마찬가지로 컬럼헤더 클릭할 때도, 맨 앞 컬럼이면 전체 체크박스 상태를 설정해야하므로

ColumnClick 함수도 추가해야합죠

 

listview.CheckBoxes = true;로 해주는것도 잊지마세용

 

윈도우 이동시키기

 

        private bool onClick;
        private Point startPoint = new Point(0, 0);
        private void moveWindow_MouseMove(object sender, MouseEventArgs e)
        {
            if(onClick)
            {
                Point p = PointToScreen(e.Location);
                Location = new Point(p.X - this.startPoint.X, p.Y - this.startPoint.Y);
            }
        }
        private void moveWindow_MouseDown(object sender, MouseEventArgs e)
        {
            onClick = true;
            startPoint = new Point(e.X, e.Y);
        }
        private void moveWindow_MouseUp(object sender, MouseEventArgs e)
        {
            onClick = false;
        }

 

판넬이나 기타 컨트롤을 마우스로 드래그해서 윈도우를 이동시키려면

아래처럼 해당 컨트롤에 이벤트 추가

 

 

윈도우 최소화시키기

        private void btnMinimize_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
        }

해당 함수를 최소화 버튼의 클릭 이벤트에 등록

커맨드라인에선 안해봐서 모르겠습니다

 

http://[아이피]:15672 (RabbitMQ 웹 서비스)접속 후 로그인한 다음에 

Connection 탭에서 연결 선택한 후 맨밑에 Force Close 누르기

다른 쓰레드에서 폼 종료하려 할때 크로스 스레드 뭐라 뜨면서 안될때

델리게이트를 사용하면 됩니당

 

MainFormClose(); 호출하면 OK

        private delegate void MainFormCloseDelegate();
        private void MainFormClose()
        {
            if (InvokeRequired)
            {
                MainFormCloseDelegate del = new MainFormCloseDelegate(MainFormClose_threadSafe);
                this.Invoke(del);
            }
            else MainFormClose_threadSafe();
        }
        private void MainFormClose_threadSafe()
        {
            MessageBox.Show("프로그램 종료");
            this.Close();
        }

[리스트뷰 이름].Items.Add([아이템]);

[리스트뷰 이름].EnsureVisible([리스트뷰 이름].Items.Count - 1);

 

아래쪽에 추가되면 스크롤 자동으로 아래로 이동

+ Recent posts