Frage

Ist dies ein einfacher Prozess?

Ich bin nur eine schnelle Hacky UI für ein internes Tool zu schreiben.

Ich will nicht ein Alter dafür ausgeben.

War es hilfreich?

Lösung

Hier ist ein schneller und schmutzig App. Im Grunde habe ich ein Formular mit einer Schaltfläche und einem ListBox. Auf Schaltfläche klicken, wird die List-Box mit dem Datum der nächsten 20 Tage bevölkern (hatte etwas zu verwenden, nur zum Testen). Dann ermöglicht es per Drag & Drop in der List-Box für Nachbestellung:

    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);
        }

Andere Tipps

7 Jahre zu spät. Aber für jeden neuen, hier ist der Code.

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;
    }

Das erste Mal ein paar Stunden in Anspruch nimmt, wenn Sie nie per Drag & Drop implementiert, will es richtig getan und hat durch die docs zu lesen. Vor allem die unmittelbare Rückmeldung und die Wiederherstellung der Liste, wenn der Benutzer die Operation Gedanken erfordern einige aufhebt. Einkapseln das Verhalten in eine wiederverwendbare Benutzerkontrolle wird noch einige Zeit in Anspruch nehmen, auch.

Wenn Sie noch nie getan haben, ziehen und überhaupt fallen, haben einen Blick auf diese Drag & Drop Beispiel aus dem MSDN. Dies wäre ein guter Ausgangspunkt sein, und es sollten Sie vielleicht einen halben Tag, um die Sache zum Laufen zu bringen.

Eine Alternative ist mit der Listenansicht Steuerung, die die Steuer Explorer verwendet den Inhalt von Ordnern anzuzeigen. Es ist komplizierter, aber implementiert Element ziehen für Sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top