перетащите вверх и вниз элемент во многих элемент в списке в winforms c # - PullRequest
0 голосов
/ 08 июня 2018

Я создал список.я вставил много элементов, чтобы список имел полосу прокрутки, а также я поместил событие перетаскивания для перетаскивания элемента вверх и вниз.Теперь моя проблема в том, что если у меня есть несколько элементов и отображение списка в виде прокрутки, то как прокрутить вверх и прокрутить вниз мой элемент в большом наборе элементов в списке.пожалуйста, предоставьте мне решение.заранее спасибо ...

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Я думаю, что FlowLayoutPanel (или TableLayoutPanel) может подойти для этой потребности, вот базовый пример, комментарии внутри кода:

private void Form1_Load(object sender, EventArgs e)
{
    // declare flowlayout panel
    FlowLayoutPanel fl = new FlowLayoutPanel();
    fl.Size = new Size(500, 800);
    // this will add a scroll bar when the children height are greater than the height
    fl.AutoScroll = true;
    this.Controls.Add(fl);
    // add pictureboxes that shows the bitmaps
    for (int i = 0; i < 20; i++)
    {
        Bitmap b = new Bitmap(@"C:\Users\xxx\xxx\xxx.png");
        PictureBox p = new PictureBox();
        p.Image = b;
        p.Size = new Size(fl.Width, 50);
        fl.Controls.Add(p);
    }
}
0 голосов
/ 08 июня 2018

Для этого вам нужно переопределить OnDrawItem, например: https://www.codeproject.com/Articles/2091/ListBox-with-Icons

// GListBoxItem class 
public class GListBoxItem
{
    private string _myText;
    private int _myImageIndex;
    // properties 
    public string Text
    {
        get {return _myText;}
        set {_myText = value;}
    }
    public int ImageIndex
    {
        get {return _myImageIndex;}
        set {_myImageIndex = value;}
    }
    //constructor
    public GListBoxItem(string text, int index)
    {
        _myText = text;
        _myImageIndex = index;
    }
    public GListBoxItem(string text): this(text,-1){}
    public GListBoxItem(): this(""){}
    public override string ToString()
    {
        return _myText;
    }
}//End of GListBoxItem class

// GListBox class 
public class GListBox : ListBox
{
    private ImageList _myImageList;
    public ImageList ImageList
    {
        get {return _myImageList;}
        set {_myImageList = value;}
    }
    public GListBox()
    {
        // Set owner draw mode
        this.DrawMode = DrawMode.OwnerDrawFixed;
    }
    protected override void OnDrawItem(System.Windows.Forms.DrawItemEventArgs e)
    {
        e.DrawBackground();
        e.DrawFocusRectangle();
        GListBoxItem item;
        Rectangle bounds = e.Bounds;
        Size imageSize = _myImageList.ImageSize;
        try
        {
            item = (GListBoxItem) Items[e.Index];
            if (item.ImageIndex != -1)
            {
                imageList.Draw(e.Graphics, bounds.Left,bounds.Top,item.ImageIndex); 
                e.Graphics.DrawString(item.Text, e.Font, new SolidBrush(e.ForeColor), 
                    bounds.Left+imageSize.Width, bounds.Top);
            }
            else
            {
                e.Graphics.DrawString(item.Text, e.Font,new SolidBrush(e.ForeColor),
                    bounds.Left, bounds.Top);
            }
        }
        catch
        {
            if (e.Index != -1)
            {
                e.Graphics.DrawString(Items[e.Index].ToString(),e.Font, 
                    new SolidBrush(e.ForeColor) ,bounds.Left, bounds.Top);
            }
            else
            {
                e.Graphics.DrawString(Text,e.Font,new SolidBrush(e.ForeColor),
                    bounds.Left, bounds.Top);
            }
        }
        base.OnDrawItem(e);
    }
}//End of GListBox class

Или вы можете использовать различные элементы управления как DataGridView или ListView
ex: Как добавитьизображение в System.Windows.Forms.ListBox?

...