⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listbox_widget.cs

📁 破解的飞信源代码
💻 CS
字号:
namespace Imps.Client.Pc.BizControls
{
    using System;
    using System.ComponentModel;
    using System.Drawing;
    using System.Runtime.CompilerServices;
    using System.Windows.Forms;

    public class listbox_widget : ListBox
    {
        private compare_func_type m_compare_func;
        private int m_current_selected_index = -1;
        private listbox_drawer_base m_drawer;
        private bool m_selected_index_guarded;

        public event cancel_select_event_handler SelectedIndexChanging;

        public int add_separator(string name)
        {
            return base.Items.Add(new separator(name));
        }

        protected override void Dispose(bool disposing)
        {
            this.drawer = null;
            this.m_current_selected_index = -1;
            base.Dispose(disposing);
        }

        public void insert_separator(int index, string name)
        {
            base.Items.Insert(index, new separator(name));
        }

        private void on_pre_select(cancel_select_event_args args)
        {
            cancel_select_event_handler selectedIndexChanging = this.SelectedIndexChanging;
            if (selectedIndexChanging != null)
            {
                selectedIndexChanging(this, args);
            }
        }

        protected override void OnDrawItem(DrawItemEventArgs e)
        {
            if ((this.m_drawer != null) && ((0 <= e.Index) && (base.Items.Count > e.Index)))
            {
                this.m_drawer.draw_host_item(this, e);
            }
        }

        protected override void OnMeasureItem(MeasureItemEventArgs e)
        {
            if (this.m_drawer != null)
            {
                this.m_drawer.measure_host_item(this, e);
            }
        }

        protected override void OnMouseDown(MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                bool flag = true;
                for (int i = 0; i < base.Items.Count; i++)
                {
                    if (base.GetItemRectangle(i).Contains(e.get_Location()))
                    {
                        this.SelectedIndex = i;
                        flag = false;
                        break;
                    }
                    if (flag)
                    {
                        this.SelectedIndex = -1;
                    }
                }
            }
            base.OnMouseDown(e);
        }

        protected override void OnSelectedIndexChanged(EventArgs e)
        {
            if (this.pre_select())
            {
                base.OnSelectedIndexChanged(e);
            }
        }

        protected override void OnSizeChanged(EventArgs e)
        {
            base.Invalidate();
            base.OnSizeChanged(e);
        }

        private bool pre_select()
        {
            if (this.m_selected_index_guarded || (this.m_current_selected_index == this.SelectedIndex))
            {
                return false;
            }
            cancel_select_event_args args = new cancel_select_event_args();
            args.Cancel = false;
            args.m_new_selected_index = this.SelectedIndex;
            args.m_old_selected_index = this.m_current_selected_index;
            this.on_pre_select(args);
            if (args.Cancel)
            {
                this.m_selected_index_guarded = true;
                try
                {
                    this.SelectedIndex = this.m_current_selected_index;
                }
                finally
                {
                    this.m_selected_index_guarded = false;
                }
                return false;
            }
            this.m_current_selected_index = this.SelectedIndex;
            return true;
        }

        protected override void Sort()
        {
            if (this.m_compare_func == null)
            {
                base.Sort();
            }
            else if (1 < base.Items.Count)
            {
                bool flag;
                do
                {
                    int num = base.Items.Count - 1;
                    flag = false;
                    while ((num - 1) >= 0)
                    {
                        if (this.m_compare_func(base.Items[num], base.Items[num - 1]))
                        {
                            object obj2 = base.Items[num];
                            base.Items[num] = base.Items[num - 1];
                            base.Items[num - 1] = obj2;
                            flag = true;
                        }
                        num--;
                    }
                }
                while (flag);
            }
        }

        protected override void WndProc(ref Message m)
        {
            if (this.m_drawer != null)
            {
                if (20 == m.Msg)
                {
                    m.Result = (IntPtr) 1;
                    using (Graphics g = Graphics.FromHdc(m.WParam))
                    {
                        this.m_drawer.draw_background(this, g);
                    }
                    return;
                }
                if ((0x201 == m.Msg) && (0 < base.Items.Count))
                {
                    Rectangle itemRectangle = base.GetItemRectangle(base.Items.Count - 1);
                    int num = ((int) m.LParam) >> 0x10;
                    if (num > itemRectangle.Bottom)
                    {
                        this.SelectedIndex = -1;
                        return;
                    }
                }
            }
            base.WndProc(ref m);
        }

        public compare_func_type compare_func
        {
            set
            {
                this.m_compare_func = value;
                if ((this.m_compare_func != null) && base.Sorted)
                {
                    this.Sort();
                }
            }
        }

        public listbox_drawer_base drawer
        {
            get
            {
                if (this.m_drawer == null)
                {
                    this.m_drawer = new headiconlist_drawer();
                }
                return this.m_drawer;
            }
            set
            {
                if (this.m_drawer != null)
                {
                    this.m_drawer.unregister(this);
                }
                this.m_drawer = value;
                if ((this.m_drawer != null) && !this.m_drawer.register(this))
                {
                    this.m_drawer = null;
                }
            }
        }

        public class cancel_select_event_args : CancelEventArgs
        {
            internal int m_new_selected_index = -1;
            internal int m_old_selected_index = -1;

            public int new_selected_index
            {
                get
                {
                    return this.m_new_selected_index;
                }
            }

            public int old_selected_index
            {
                get
                {
                    return this.m_old_selected_index;
                }
            }
        }

        public delegate void cancel_select_event_handler(object sender, listbox_widget.cancel_select_event_args args);

        public delegate bool compare_func_type(object e1, object e2);

        public class item_type
        {
            internal listbox_widget owner;
        }

        public class separator
        {
            private string m_name;

            public separator(string name)
            {
                this.m_name = name;
            }

            public string name
            {
                get
                {
                    return this.m_name;
                }
                set
                {
                    this.m_name = this.name;
                }
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -