屠宰场客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

170 lines
4.3 KiB

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BWP.WinFormControl
{
public class UComboBox : ComboBox
{
ToolTip itemTip = null;
public UComboBox()
{
this.DropDown += (sender, de) =>
{
CRefreshItems();
//if (string.IsNullOrEmpty(this.Text))
// return;
//if (_enableTopItem && Items.Count > 1)
// this.SelectedIndex = 1;
//else if (!_enableTopItem && Items.Count > 0)
// this.SelectedIndex = 0;
};
this.DrawMode = DrawMode.OwnerDrawFixed;
this.DrawItem += new DrawItemEventHandler(cb_DrawItem);
this.DropDownClosed += new EventHandler(cb_DropDownClosed);
itemTip = new ToolTip();
itemTip.SetToolTip(this, "");
}
void cb_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
{
// 绘制背景
e.DrawBackground();
//绘制列表项目
e.Graphics.DrawString(this.Items[e.Index].ToString(), e.Font, System.Drawing.Brushes.Black, e.Bounds);
//将高亮的列表项目的文字传递到toolTip1(之前建立ToolTip的一个实例)
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
itemTip.Show(this.Items[e.Index].ToString(), this, e.Bounds.X + e.Bounds.Width, e.Bounds.Y + e.Bounds.Height);
e.DrawFocusRectangle();
}
void cb_DropDownClosed(object sender, EventArgs e)
{
itemTip.Hide(this);
}
public string DefaultServerPath = "/MainSystem/B3ClientService/Rpcs/";
public string CodeArgs { get; set; }
private bool _enableTopItem = true;
public bool EnableTopItem
{
get { return _enableTopItem; }
set { _enableTopItem = value; }
}
private int range = 10;
public int Range
{
get { return range; }
set { range = value; }
}
private string rpcPath;
public void Init(string _rpcPath)
{
rpcPath = _rpcPath;
if (string.IsNullOrEmpty(rpcPath))
return;
rpcPath = string.Format("{0}{1}", DefaultServerPath, rpcPath);
}
protected override void OnKeyUp(KeyEventArgs e)
{
base.OnKeyUp(e);
if (e.KeyCode == System.Windows.Forms.Keys.Enter)
{
if (string.IsNullOrEmpty(this.Text) || this.DisplayValue != this.Text || string.IsNullOrEmpty(this.SelectedText))
{
if (!this.DroppedDown)
this.DroppedDown = true;
}
}
}
private new WordPair SelectedValue
{
get
{
if (this.SelectedItem == null)
return null;
var result = this.SelectedItem as WordPair;
if (string.IsNullOrEmpty(result.PhyName) && string.IsNullOrEmpty(result.DisplayName))
return null;
return result;
}
}
void CRefreshItems()
{
var inputArgs = string.Empty;
if (this.SelectedValue == null)
inputArgs = this.Text;
var list = ComboBoxHelper.GetList(rpcPath, inputArgs, CodeArgs, Range);
if (_enableTopItem)
list.Insert(0, new WordPair(string.Empty));
this.Items.Clear();
foreach (var item in list)
this.Items.Add(item);
this.DisplayMember = "DisplayName";
this.ValueMember = "PhyName";
}
public void Fill(string displayValue, string phyValue)
{
this.SelectedText = displayValue;
this.SelectedItem = new WordPair(displayValue, phyValue);
}
public void Clear()
{
this.Text = null;
this.SelectedText = null;
this.SelectedItem = null;
}
public bool IsEmpty
{
get { return SelectedValue == null; }
}
public string DisplayValue
{
get
{
if (SelectedValue == null)
return string.Empty;
return SelectedValue.DisplayName;
}
}
public string Value
{
get
{
if (SelectedValue == null)
return string.Empty;
return SelectedValue.PhyName;
}
}
public long? LongValue
{
get
{
if (SelectedValue == null)
return null;
long v;
if (long.TryParse(SelectedValue.PhyName, out v))
return v;
return null;
}
}
}
}