#c# #winforms #.net-2.0
#c# #winforms #.net-2.0
Вопрос:
Я хотел бы указать пользователю, что они пытаются перетащить на неправильный уровень узла, изменив значок на мыши. Кажется, я не могу разобраться с этим … есть предложения?
Ответ №1:
Удаление в treeview — сомнительное предложение, узел, на который пользователь хотел бы перейти, может быть не виден. Либо потому, что он свернут и скрыт, либо прокручивается за пределы экрана. В любом случае, вы хотите использовать событие перетаскивания и проверить, где находится мышь. Вот пример формы, которая делает это. Поместите на него treeview и добавьте несколько узлов. Нажмите на форму и перетащите. Он разрешает перетаскивание только на узлах 2-го уровня:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
treeView1.AllowDrop = true;
treeView1.DragEnter = treeView1_DragEnter;
treeView1.DragOver = treeView1_DragOver;
}
protected override void OnMouseDown(MouseEventArgs e) {
DoDragDrop("foo", DragDropEffects.Copy);
base.OnMouseDown(e);
}
private void treeView1_DragEnter(object sender, DragEventArgs e) {
// TODO: check e.Data
e.Effect = DragDropEffects.Copy;
}
private void treeView1_DragOver(object sender, DragEventArgs e) {
Point pos = treeView1.PointToClient(new Point(e.X, e.Y));
var hit = treeView1.HitTest(pos);
TreeNode node = hit.Node;
if (hit.Node != null) {
node.Expand();
if (node.Level != 1) node = null;
}
e.Effect = node != null ? DragDropEffects.Copy : DragDropEffects.None;
}
}
Ответ №2:
Проверьте http://msdn.microsoft.com/en-us/library/system.windows.forms.drageventargs.aspx для документации DragEventArgs. Для этого эффекта следует установить значение none:
e.Effect = DragDropEffects.None;