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