Microsoft.DirectX 播放声音用到的Dll
Microsoft.DirectX.dll
Microsoft.DirectX.DirectSound.dll
Microsoft.DirectX.AudioVideoPlayback.dll
简易用法:
http://yuyingying1986.blog.hexun.com/28920902_d.html
Gis图标 16*16
包含放大,缩小,平移,测距,图层控制等图标,都是16*16的小图标,希望能有用
将SQL2000数据库字段说明生成为Word格式数据字典
开发完程序之后,使用本程序,可以生成数据字典,本资源只支持SQLSERVER2000,如果是2000以上的版本,需要把sysproperties表换成sys.extended_properties,sysproperties.id换成sys.extended_properties.major_id,colid对应sys.extended_properties..minor_id
C# ListView 支持分组时拖拉排序的控件
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections.Generic;
namespace WindowsFormsApplication1
{
class DragItemListView:ListView
{
public DragItemListView()
{
SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
UpdateStyles();
this.MultiSelect = false;
this.ListViewItemSorter = new ListViewIndexComparer();
if (OSFeature.Feature.IsPresent(OSFeature.Themes))
{
this.AllowDrop = true;
this.ItemDrag += new ItemDragEventHandler(DragItemListView_ItemDrag);
this.DragEnter += new DragEventHandler(DragItemListView_DragEnter);
this.DragLeave += new EventHandler(DragItemListView_DragLeave);
this.DragOver += new DragEventHandler(DragItemListView_DragOver);
this.DragDrop += new DragEventHandler(DragItemListView_DragDrop);
}
}
void DragItemListView_DragDrop(object sender, DragEventArgs e)
{
// Retrieve the index of the insertion mark;
int targetIndex = this.InsertionMark.Index;
// If the insertion mark is not visible, exit the method.
if (targetIndex == -1)
{
return;
}
// If the insertion mark is to the right of the item with
// the corresponding index, increment the target index.
// Retrieve the dragged item.
ListViewItem draggedItem =
(ListViewItem)e.Data.GetData(typeof(ListViewItem));
// Insert a copy of the dragged item at the target index.
// A copy must be inserted before the original item is removed
// to preserve item index values.
ListViewItem NewItem = (ListViewItem)draggedItem.Clone();
if (draggedItem.Index < targetIndex)
{
if (targetIndex - draggedItem.Index > 1)
NewItem.Group = this.Items[targetIndex - 1].Group;
else
NewItem.Group = this.Items[targetIndex].Group;
}
else
{
if (draggedItem.Index - targetIndex > 1)
NewItem.Group = this.Items[targetIndex].Group;
else
NewItem.Group = this.Items[targetIndex - 1].Group;
}
if (this.InsertionMark.AppearsAfterItem)
{
targetIndex++;
}
this.Items.Insert(targetIndex, NewItem);
// Remove the original copy of the dragged item.
this.Items.Remove(draggedItem);
}
void DragItemListView_DragOver(object sender, DragEventArgs e)
{
// Retrieve the client coordinates of the mouse pointer.
Point targetPoint =
this.PointToClient(new Point(e.X, e.Y));
// Retrieve the index of the item closest to the mouse pointer.
//int targetIndex = this.InsertionMark.NearestIndex(targetPoint);
int targetIndex = GetNearItem(targetPoint).Index;
// Confirm that the mouse pointer is not over the dragged item.
if (targetIndex > -1)
{
// Determine whether the mouse pointer is to the left or
// the right of the midpoint of the closest item and set
// the InsertionMark.AppearsAfterItem property accordingly.
Rectangle itemBounds = this.GetItemRect(targetIndex);
if (targetPoint.X > itemBounds.Left + (itemBounds.Width / 2))
{
this.InsertionMark.AppearsAfterItem = true;
}
else
{
this.InsertionMark.AppearsAfterItem = false;
}
}
// Set the location of the insertion mark. If the mouse is
// over the dragged item, the targetIndex value is -1 and
// the insertion mark disappears.
this.InsertionMark.Index = targetIndex;
}
void DragItemListView_DragLeave(object sender, EventArgs e)
{
this.InsertionMark.Index = -1;
}
void DragItemListView_ItemDrag(object sender, ItemDragEventArgs e)
{
this.DoDragDrop(e.Item, DragDropEffects.Move);
}
void DragItemListView_DragEnter(object sender, DragEventArgs e)
{
e.Effect = e.AllowedEffect;
}
private class ListViewIndexComparer : System.Collections.IComparer
{
public int Compare(object x, object y)
{
return ((ListViewItem)x).Index - ((ListViewItem)y).Index;
}
}
/// <summary>
/// 搜索最近的ListViewItem
/// </summary>
/// <param name="ClientPoint">工作区坐标</param>
/// <returns></returns>
public ListViewItem GetNearItem(Point ClientPoint)
{
ListViewItem lvt = this.GetItemAt(ClientPoint.X, ClientPoint.Y);
if (lvt != null) return lvt;
List<ListViewItem> vt = new List<ListViewItem>();
for (int i = 1; i < 10; i++)
{
lvt = this.GetItemAt(ClientPoint.X, ClientPoint.Y + i);
if (lvt != null) vt.Add(lvt);
lvt = this.GetItemAt(ClientPoint.X, ClientPoint.Y - i);
if (lvt != null) vt.Add(lvt);
lvt = this.GetItemAt(ClientPoint.X + i, ClientPoint.Y);
if (lvt != null) vt.Add(lvt);
lvt = this.GetItemAt(ClientPoint.X + i, ClientPoint.Y + i);
if (lvt != null) vt.Add(lvt);
lvt = this.GetItemAt(ClientPoint.X + i, ClientPoint.Y - i);
if (lvt != null) vt.Add(lvt);
lvt = this.GetItemAt(ClientPoint.X - i, ClientPoint.Y);
if (lvt != null) vt.Add(lvt);
lvt = this.GetItemAt(ClientPoint.X - i, ClientPoint.Y + i);
if (lvt != null) vt.Add(lvt);
lvt = this.GetItemAt(ClientPoint.X - i, ClientPoint.Y - i);
if (lvt != null) vt.Add(lvt);
if (vt.Count > 0) break;
}
if (vt.Count == 0)
{
return null;
}
else if (vt.Count == 1)
{
return vt[0];
}
else
{
double HisDis = 0;
int i = 0;
foreach (ListViewItem item in vt)
{
double dis = GetDistince(ClientPoint, item.Position);
if (i == 0 || dis < HisDis)
{
lvt = item;
HisDis = dis;
}
i++;
}
return lvt;
}
}
/// <summary>
/// 两点间的距离
/// </summary>
/// <param name="start">起点</param>
/// <param name="end">终点</param>
/// <returns></returns>
private double GetDistince(Point start, Point end)
{
double distince2 = Math.Pow((start.X - end.X), 2) + Math.Pow((start.Y - end.Y), 2);
return Math.Abs(Math.Sqrt(distince2));
}
}
}
C# 自定义组件编辑器 Demo
下拉框的形式,可以展开的类型转换器,自定义UI的属性编辑器(弹出消息),下拉可视控件编辑器,列表等