ObjectListView перетащите в RichTextBox - PullRequest
1 голос
/ 16 января 2012

Итак, у меня есть просмотр списка объектов (на самом деле это просмотр списка деревьев). Я хочу иметь возможность перетаскивать элемент из этого на richtextbox, и чтобы он вставил свойство перетаскиваемого элемента (в данном случае Default_Heirarchy_ID)

Объектной моделью TreeListView является List<T> класса с именем SpecItem.

Это то, что я имею до сих пор:

    public frmAutospecEditor(SpecItem siThis_, List<SpecItem> lstStock_)
    {
        InitializeComponent();

        txtFormula.DragEnter += new DragEventHandler(txtFormula_DragEnter);
        txtFormula.DragDrop += new DragEventHandler(txtFormula_DragDrop);
        ...
    }

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

    private void tlvSpecItem_ItemDrag(object sender, ItemDragEventArgs e)
    {
        int intID = ((SpecItem)tlvSpecItem.GetItem(tlvSpecItem.SelectedIndex).RowObject).Default_Heirarchy_ID ??0;
        DoDragDrop(intID, DragDropEffects.Copy);
    }
    private void txtFormula_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    {

        object objID = e.Data.GetData(typeof(String)); 
        //this is where it goes wrong - no matter what I try to do with this, it 
        //always returns either null, or the text displayed for that item in the TreeListView,               
        //NOT the ID as I want it to.
        string strID = (string)objID;
        txtFormula.Text = strID;
    }

Куда я иду не так?

Приветствия

1 Ответ

1 голос
/ 02 февраля 2012

Drag - это элемент управления, с которого вы хотите получить данные (ваш OLV).Drop - это пункт назначения (ваше текстовое поле).Итак:

Установите для свойства IsSimpleDragSource вашего OLV значение true.

В текстовом поле установите для свойства AllowDrop значение true.Затем обработайте событие DragEnter вашего текстового поля и используйте параметр DragEventArgs.

Обработка события ModelDropped:

private void yourOlv_ModelDropped(object sender, ModelDropEventArgs e) 
{ 
   // If they didn't drop on anything, then don't do anything 
   if (e.TargetModel == null) return; 

   // Use the dropped data: 
   // ((SpecItem)e.TargetModel) 
   // foreach (SpecItem si in e.SourceModels) ...

   // e.RefreshObjects(); 
}

Подробнее: http://objectlistview.sourceforge.net/cs/dragdrop.html#ixzz1lEt7LoGr

...