Frage

Sampling per Drag-and-Drop zwischen Windows Forms Rich innerhalb einer Anwendung und zwischen ihnen und externen Anwendungen ergab zwei interessante Beobachtungen (Punkt 1 erscheint sicherlich ein Fehler zu sein, in einer perfekten Welt, Punkt 2 wahrscheinlich auch wäre):

  1. Einige Drag-and-Drop-Operationen den gezogene Text aus dem Quellbehälter löschen, , ob es gesetzt ist schreibgeschützt . (Danke an Mark Morgan für die erste in seinem Bugreport rel="nofollow auf meiner Open-Source-Website).
  2. Ob Text beibehalten wird oder aus einem Quellbehälter gelöscht ist inkonsistent zwischen verschiedenen Anwendungen.

Ich konnte keine definitive Referenz finden die angibt, wie Drag-and-Drop-Verhalten sein soll. Die nächstgelegene ich war auf Seite 476 der Windows User Experience Interaktion Richtlinien gefunden (für Vista): „Ziehen und Ablegen: Objekt bewegt oder auf die Drop-Ziel kopiert“. Nun, das ausgerichtet ist auf jeden Fall mit meinen Beobachtungen; Einige Anwendungen bewegen Sie das Objekt, andere kopieren!

Die Fragen: Ich möchte 1 über eine Abhilfe für ein Produkt finden; es ärgert mich, dass ein Nur-Lese-Behälter nicht unantastbar ist! Als sekundäre Frage, ich frage mich, ob jemand einen Verweis auf, wie Drag-and-Drop hat soll sich verhalten? Wann ist es eine Bewegung, und wenn es eine Kopie?

Meine Probe WinForm Anwendung (Code unten) enthält zwei RichTextBox-Steuerelemente, die linke schreibgeschützt ist (nennen wir diese RTB1) und mit etwas Text initialisiert; die richtige (RTB2) lesen / schreiben wird, um es Text zu empfangen. Beide haben Drag-and-Drop für den Test freigegeben. Hier sind die Kombinationen I getestet; in jedem feststellen, dass die Gruppierung gibt es mindestens einen „odd-Mann-out“:


  1. Von RTB1 zu RTB2: move
  2. Von RTB1 anderen RTB (extern): move
  3. Von RTB1 zu WordPad: copy
  4. Von RTB1 zu Word2003: move
  5. Von RTB1 zu Outlook2003: copy
  6. Von RTB1 zu Firefox3.0: copy


  7. Von RTB2 anderer RTB (extern): move

  8. Von RTB2 zu WordPad: copy
  9. Von RTB2 zu Outlook2003: copy
  10. Von RTB2 zu Firefox3.0: copy


  11. Von Outlook2003 zu RTB2: move

  12. WordPad RTB2: move
  13. Word2003 zu RTB2: move
  14. Von anderem RTB (extern) zu RTB2: move
  15. Von Firefox3.0 zu RTB2: copy


  16. Von Word2003 zu Outlook2003: copy

  17. Von Outlook2003 zu Word2003: Umzug

Tests laufen auf WinXP.
Test-App mit .NET 2.0 (versucht, ein Paar mit .NET 3.5 mit dem gleichen Ergebnis) zusammengestellt.


Hier ist die Beispielanwendung:

using System;
using System.Windows.Forms;

namespace RichTextBoxTest
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }

    partial class Form1 : Form
    {

        private RichTextBox richTextBox1 = new RichTextBox();
        private RichTextBox richTextBox2 = new RichTextBox();

        public Form1()
        {
            InitializeComponent();
        }

        private System.ComponentModel.IContainer components = null;

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        private void InitializeComponent()
        {
            this.SuspendLayout();
            // 
            // richTextBox1
            // 
            this.richTextBox1.EnableAutoDragDrop = true;
            this.richTextBox1.Location = new System.Drawing.Point(34, 25);
            this.richTextBox1.ReadOnly = true;
            this.richTextBox1.Size = new System.Drawing.Size(122, 73);
            this.richTextBox1.Text = "some stuff here";
            // 
            // richTextBox2
            // 
            this.richTextBox2.EnableAutoDragDrop = true;
            this.richTextBox2.Location = new System.Drawing.Point(177, 25);
            this.richTextBox2.Size = new System.Drawing.Size(122, 73);
            this.richTextBox2.Text = "";
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(338, 122);
            this.Controls.Add(this.richTextBox2);
            this.Controls.Add(this.richTextBox1);
            this.Text = "Form1";
            this.ResumeLayout(false);
        }
    }
}
War es hilfreich?

Lösung

Nachdem hatte keine Leckerbissen auf diese legte ich weiter in das Thema vertieft.

Zuerst erhielt ich einige offiziellen Defekt Bericht Microsoft Connect espousing diese Meinung. Ach, die Antwort kam zurück als im wesentlichen „Danke, aber nicht wichtig genug, um ein Problem zu beheben.“ Seufz ...

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