Изменение значений местоположения объектов формы в массиве списка - PullRequest
0 голосов
/ 07 октября 2011

У меня есть winform, и в нем есть список объектов MyController.

List<MyController> _myController = new List <MyController>();

Этот объект mycontroller содержит 1 флажок, 4 текстовых поля и 1 кнопку в каждой строке.

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

Как мне написать код для этого на C #?

В функции buttonClick я попробовал следующее, но, по-видимому, это не работает:

private void downButton_Click(object sender, EventArgs e)
    {
        string NameSet = (sender as Button).Name.Split(new char[] { '_' })[1];
        int itemNo = Int32.Parse(NameSet);
        MyControls tempObj = new MyControls();
        if (itemNo>0)
        {
        tempObj = _myControls[itemNo];
        _myControls[itemNo] = _myControls[itemNo - 1];
        _myControls[itemNo - 1] = tempObj;

        }
    }

, вероятно, мне нужносделать это изменение с помощью указателей и ссылок.Но как я могу отразить это изменение в моей активной форме?

Ответы [ 2 ]

1 голос
/ 07 октября 2011

Вы меняете порядок в списке, но не относительное расположение двух строк в вашем пользовательском интерфейсе.Порядок элементов управления в коллекции почти не имеет смысла для большинства объектов пользовательского интерфейса, если только этот порядок не используется специально для определения местоположения (например, если коллекция была источником данных ListBox или аналогичного элемента управления).

Что выВам нужно будет поменять Y-координаты каждого экземпляра MyController или их элементов управления в дополнение к самим элементам управления.Было бы очень легко, если бы MyController был производным от UserControl или иным образом имел свою собственную область рисования, в которой располагались дочерние элементы:

private void downButton_Click(object sender, EventArgs e)
{
    string NameSet = (sender as Button).Name.Split(new char[] { '_' })[1];
    int itemNo = Int32.Parse(NameSet);
    if (itemNo>0)
    {
       //swap row locations
       var temp = _myControls[itemNo-1].Y;
       _myControls[itemNo-1].Y = _myControls[itemNo].Y;
       _myControls[itemNo].Y = temp;
       //swap list order
       var tempObj = _myControls[itemNo];
       _myControls.RemoveAt(itemNo);
       _myControls.Insert(tempObj, itemNo-1);
    }
}
0 голосов
/ 07 октября 2011
public void MoveItemUp( int index ) {
    MyController c = _myController[index];
    _myController.RemoveAt( index );
    _myController.Insert( index - 1, c );
}

public void MoveItemDown( int index ) {
    MyController c = _myController[index];
    _myController.RemoveAt( index );
    _myController.Insert( index + 1, c );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...