Перетащите элемент из списка в форму - PullRequest
0 голосов
/ 30 октября 2019

У меня есть две формы;один из них содержит просмотр списка, а другой - просто форму.

Я хочу сделать что-то: если я перетащу элемент из списка в форму, появится окно сообщения. и сообщение будет текстом элемента.

Однако я не знаю, почему «SelectedItem» имеет значение null. Когда я отслеживал SelectedItem, он был нулевым.

Я обнаружил, что должен использовать события MouseDown и DragDrop, но я не знаю, как его использовать.

Первый - это код списка:

rListCtrl.MouseDown += rListCtrl_MouseDown;
rListCtrl.DragDrop += rListCtrl_DragDrop;


private void rListCtrl_MouseDown(object sender, MouseEventArgs e)
{
    StringBuilder sb = new STringBuilder();
    sb.Append(radListView1.SelectedItem.ToString());
    testName = sb.ToString();
}

private void rListCtrl_DragDrop(object sender, DragEventArgs e){
{
    MessageBox.Show(testName);
}

radListView1 - это имя списка.

Ответы [ 3 ]

0 голосов
/ 30 октября 2019

Форма 1:

public partial class Form1 : Form
{
    Form2 f = new Form2();
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        f.Show();
    }

    private void Form1_MouseEnter(object sender, EventArgs e)
    {
        if(f.data!= string.Empty)
        {
            MessageBox.Show(f.data);
            f.data = string.Empty;
        }

    }
}

Форма 2:

public partial class Form2 : Form
{
    public string data = string.Empty;
    public Form2()
    {
        InitializeComponent();
        listView1.ItemDrag += doDaragItem;
    }

    private void doDaragItem(Object sender, ItemDragEventArgs e)
    {
        data = e.Item.ToString();
    }
}
0 голосов
/ 01 ноября 2019

Ron,

RadListView из пользовательского интерфейса Telerik из набора WinForms выполняет всю операцию перетаскивания с помощью своего ListViewDragDropService. Его событие PreviewDragOver позволяет вам контролировать, на какие цели можно перетаскивать перетаскиваемые элементы. Событие PreviewDragDrop позволяет получить дескриптор всех аспектов операции перетаскивания, представления списка источников (перетаскивания), элемента управления назначения (цели), а также перетаскиваемого элемента. Дополнительная информация доступна в следующей справочной статье: https://docs.telerik.com/devtools/winforms/controls/listview/drag-and-drop/listviewdragdropservice https://docs.telerik.com/devtools/winforms/controls/listview/drag-and-drop/drag-and-drop-using-raddragdropservice

Вы также можете комбинировать функции перетаскивания и перетаскивания RadDragDropService и OLE: https://docs.telerik.com/devtools/winforms/controls/listview/drag-and-drop/combining-raddragdropservice-and-ole-drag-and-drop

Какк конкретному фрагменту кода, действительно, если у вас нет выделенного элемента в RadListView, код в событии MouseDown не будет извлекать текст элемента. Вам нужно поместить элемент под мышью и установить элемент следующим образом:

        private void radListView1_MouseDown(object sender, MouseEventArgs e)
    {
        SimpleListViewVisualItem elementUnderMouse = this.radListView1.ElementTree.GetElementAtPoint(e.Location) as SimpleListViewVisualItem;
        if (elementUnderMouse != null)
        {
            this.radListView1.SelectedItem = elementUnderMouse.Data ;
        }
        StringBuilder sb = new StringBuilder();
        sb.Append(radListView1.SelectedItem.Text.ToString());
        {
            testName = sb.ToString();
        }
        MessageBox.Show(testName);
    }

Надеюсь, эта информация поможет.

0 голосов
/ 30 октября 2019

Причина, по которой SelectedItem является нулевым, заключается в том, что Элемент выбирается только тогда, когда вы фактически выполняете щелчок, а не просто MouseDown. Однако вы можете использовать метод IndexFromPoint, чтобы получить Предмет, на который была наложена мышь при вызове события MouseDown:

private void radListView1_MouseDown(object sender, MouseEventArgs e)
{
    int index = radListView1.IndexFromPoint(e.Location);
    radListView1.SelectedIndex = index;
    testName = radListView1.Items[index].ToString();
}

private void rListCtrl_DragDrop(object sender, DragEventArgs e){
{
    MessageBox.Show(testName);
}
...