Это простой процесс?
Я пишу только быстрый хакерский интерфейс для внутреннего инструмента.
Я не хочу тратить на это время.
Это простой процесс?
Я пишу только быстрый хакерский интерфейс для внутреннего инструмента.
Я не хочу тратить на это время.
Вот быстрое и грязное приложение. В основном я создал форму с кнопкой и ListBox. При нажатии кнопки ListBox заполняется датой следующих 20 дней (нужно было использовать что-то только для тестирования). Затем он позволяет перетаскивать в ListBox для переупорядочения:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.listBox1.AllowDrop = true;
}
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i <= 20; i++)
{
this.listBox1.Items.Add(DateTime.Now.AddDays(i));
}
}
private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
if (this.listBox1.SelectedItem == null) return;
this.listBox1.DoDragDrop(this.listBox1.SelectedItem, DragDropEffects.Move);
}
private void listBox1_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
private void listBox1_DragDrop(object sender, DragEventArgs e)
{
Point point = listBox1.PointToClient(new Point(e.X, e.Y));
int index = this.listBox1.IndexFromPoint(point);
if (index < 0) index = this.listBox1.Items.Count-1;
object data = e.Data.GetData(typeof(DateTime));
this.listBox1.Items.Remove(data);
this.listBox1.Items.Insert(index, data);
}
В первый раз требуется несколько часов, если вы никогда не выполняли перетаскивание, хотите сделать все правильно и прочитать документы. Особенно немедленная обратная связь и восстановление списка, если пользователь отменяет операцию, требуют некоторых мыслей. Инкапсуляция поведения в пользовательский элемент многократного использования займет некоторое время.
Если вы никогда не делали перетаскивание вообще, посмотрите на этот пример перетаскивания из MSDN. Это было бы хорошей отправной точкой, и вам понадобится полдня, чтобы заставить работу работать.
Альтернативой является элемент управления list-view, который используется проводником управления для отображения содержимого папок. Это сложнее, но реализует перетаскивание элементов для вас.
7 лет спустя. Но для кого-то нового, вот код.
private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
if (this.listBox1.SelectedItem == null) return;
this.listBox1.DoDragDrop(this.listBox1.SelectedItem, DragDropEffects.Move);
}
private void listBox1_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
private void listBox1_DragDrop(object sender, DragEventArgs e)
{
Point point = listBox1.PointToClient(new Point(e.X, e.Y));
int index = this.listBox1.IndexFromPoint(point);
if (index < 0) index = this.listBox1.Items.Count - 1;
object data = listBox1.SelectedItem;
this.listBox1.Items.Remove(data);
this.listBox1.Items.Insert(index, data);
}
private void itemcreator_Load(object sender, EventArgs e)
{
this.listBox1.AllowDrop = true;
}