ورود

View Full Version : drag & drop in c#



tabrzichi_z
چهارشنبه 28 مرداد 1394, 12:58 عصر
سلام....
ببخشید من نیاز دارم از طریق کنترل dragdrop یه node رو از treeview به textbox منتقل کنم
ولی متاسفانه کدی که نوشتم جواب نمیده :(((( کسی در این زمینه اطلاعی داره منو راهنمایی کنه ؟؟؟:گریه::گریه::گریه::گریه::گ یه:
اینم کدم

[CODE][using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private TreeView treeview1;
private void Form1_Load(object sender, EventArgs e)
{


TreeNode ParentNode1;
TreeNode ParentNode2;
ParentNode1 = treeView1.Nodes.Add("All output");
ParentNode1.Nodes.Add("ambient air density");
ParentNode1.Nodes.Add("compr spec power");
ParentNode1.Nodes.Add("core efficiency");
ParentNode1.Nodes.Add("equivalent SFC");
ParentNode1.Nodes.Add("equivalent shaft power");
ParentNode2 = treeView1.Nodes.Add("temperatures");
ParentNode2.Nodes.Add("inlet temperature");
ParentNode2.Nodes.Add("compr exit temp");
ParentNode2.Nodes.Add("HP turbine exit temp");



treeview1.MouseDown += new MouseEventHandler(treeview1_MouseDown);
//textBox1.DragEnter += new DragEventHandler(textBox1_DragEnter);
//textBox1.DragDrop += new DragEventHandler(textBox1_DragDrop);
}
private void treeview1_MouseDown(object sender, MouseEventArgs e)
{

TreeNode tn = treeView1.GetNodeAt(e.X, e.Y);
textBox1.Text = treeView1.SelectedNode.Nodes["nodename"].Text;

}
//void textBox1_DragEnter(object sender, DragEventArgs e)
//{


//e.Effect = DragDropEffects.Copy;
//}
//void textBox1_DragDrop(object sender, DragEventArgs e)
//{

// textBox1.Text = e.Data.GetData(DataFormats.Text).ToString();
//}




private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{


}
private void textBox1_TextChanged(object sender, EventArgs e)
{

}
private void textBox2_TextChanged(object sender, EventArgs e)
{


}



}


}



/CODE]

reza_noei
چهارشنبه 28 مرداد 1394, 14:18 عصر
سلام

من یک راه حل دارم البته در این روش باید اول گره را انتخاب و بعد Drag کنید:

1. یک شی TreeNode را به شکل سراسری تعریف کنید. (در کلاس فرم جاریتان، منظور public نیست scope آن سراسری باشد). مثلا نام آن CurrentNode باشد.
2. برای رویداد SelectBefore شی TreeView تان کد زیر را بنویسید :
if (e.Node.Nodes.Count == 0)
{
Current = e.Node;
}


این کار باعث میشود که تنها گره ای انتخاب شود که فرزند نداشته باشد.
3. حال در رویداد Leave همین کنترل TreeView را با کد زیر مدیریت کنید :
Current = null;

4. برای رویداد MouseEnter کنترل TextBox کد زیر را بنویسید :

if (Current != null)
{
Textbox This = (TextBox)sender;
This.Text = Current.Text;
}
میتوانید از هر یک ویژگی های شی منتقل شده بهره ببرید.