Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改列表数组中窗体对象的位置值_C#_Forms_List_Textbox - Fatal编程技术网

C# 更改列表数组中窗体对象的位置值

C# 更改列表数组中窗体对象的位置值,c#,forms,list,textbox,C#,Forms,List,Textbox,我有一个winform,其中有一个MyController对象列表 List<MyController> _myController = new List <MyController>(); 可能我需要通过指针和引用来进行更改。但是,如何在活动表单中反映此更改?您正在更改列表中的顺序,而不是UI中两行的相对位置。集合中控件的顺序对于大多数UI对象几乎没有意义,除非该顺序专门用于定义位置(例如,如果集合是ListBox或类似控件的数据源) public void Move

我有一个winform,其中有一个MyController对象列表

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

可能我需要通过指针和引用来进行更改。但是,如何在活动表单中反映此更改?

您正在更改列表中的顺序,而不是UI中两行的相对位置。集合中控件的顺序对于大多数UI对象几乎没有意义,除非该顺序专门用于定义位置(例如,如果集合是ListBox或类似控件的数据源)

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 );
}
您需要做的是交换MyController的每个实例的Y坐标,或者它们包含的控件,以及控件本身。如果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);
    }
}

您需要提供更多详细信息,例如什么是MyController?这会更改集合中行的顺序,但不会更改它们在UI上的位置。只有当myController是ListView或其他东西的数据源时,它才会起作用。
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);
    }
}