📄 listbox_widget.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 + -