C#
一种面向对象的类型安全的编程语言,它起源于 C 语言系列,包括对面向组件的编程的支持。
188 个问题
public panelS GetPanelS(Grid panelGrid)
{
//Grid panelGrid = _lbls.Parent as Grid;
Canvas pageGrid = panelGrid.Parent as Canvas;
ScrollViewer scrollViewer = pageGrid.Parent as ScrollViewer;
TabItem tabItem = scrollViewer.Parent as TabItem;
foreach (myTabPages _myTabPage2 in InvokeWindow._myTabPages)
{
if (_myTabPage2._tabPageName == tabItem.Name)
{
foreach (panelS panelS2 in _myTabPage2._panelS)
if (panelS2.panelName == panelGrid.Name)
{
return panelS2;
}
}
}
return null;
}
public myTabPages GetmyTabPages(string tabPageName)
{
foreach (myTabPages _myTabPages3 in InvokeWindow._myTabPages)
if (_myTabPages3._tabPageName == tabPageName)
return _myTabPages3;
return null;
}
当以上代码与下面代码在同一个类里时,执行正常。
myTabPages myTabPage = GetmyTabPages(tabItem1.Name);
panelS panelS1 = GetPanelS(finalPressedgrid);
myTabPage._panelS.Remove(panelS1);//删除重复
myTabPage._panelS.Insert(dragOverGridIndex, panelS1);//插入数组
当上面两个方法在GetArrayControl类里时,
GetArrayControl getArrayControl1 = new GetArrayControl();
myTabPages myTabPage = getArrayControl1.GetmyTabPages(tabItem1.Name);
panelS panelS1 = getArrayControl1.GetPanelS(finalPressedgrid);
myTabPage._panelS.Remove(panelS1);//删除重复
myTabPage._panelS.Insert(dragOverGridIndex, panelS1);//插入数组
执行不正常,代码修改了myTabPage ,并没有修改InvokeWindow._myTabPages中的内容。
为什么?
当你在GetArrayControl
类中调用GetmyTabPages
和GetPanelS
方法时,返回的对象可能是myTabPages
和panelS
的副本或引用错误,而不是对InvokeWindow._myTabPages
中对象的直接引用。
在 C# 中,如果你直接访问一个类的字段(如InvokeWindow._myTabPages
),你会得到该对象的引用。但如果你通过某种方式创建了新的对象或传递了副本(例如通过值类型复制或者错误的引用路径),你将不会影响原来的集合。
你可以先检查InvokeWindow._myTabPages是否为静态(static):public static List<myTabPages> _myTabPages;
如果InvokeWindow._myTabPages
不是静态的,确保在GetArrayControl
类中持有对同一个InvokeWindow
对象的引用。例如:
public class GetArrayControl
{
private InvokeWindow _invokeWindow;
public GetArrayControl(InvokeWindow invokeWindow)
{
_invokeWindow = invokeWindow;
}
public panelS GetPanelS(Grid panelGrid)
{
//Grid panelGrid = _lbls.Parent as Grid;
Canvas pageGrid = panelGrid.Parent as Canvas;
ScrollViewer scrollViewer = pageGrid.Parent as ScrollViewer;
TabItem tabItem = scrollViewer.Parent as TabItem;
foreach (myTabPages _myTabPage2 in InvokeWindow._myTabPages)
{
if (_myTabPage2._tabPageName == tabItem.Name)
{
foreach (panelS panelS2 in _myTabPage2._panelS)
if (panelS2.panelName == panelGrid.Name)
{
return panelS2;
}
}
}
return null;
}
public myTabPages GetmyTabPages(string tabPageName)
{
foreach (myTabPages _myTabPages3 in _invokeWindow._myTabPages)
if (_myTabPages3._tabPageName == tabPageName)
return _myTabPages3;
return null;
}
}
GetArrayControl getArrayControl1 = new GetArrayControl(invokeWindowInstance);
myTabPages myTabPage = getArrayControl1.GetmyTabPages(tabItem1.Name);
panelS panelS1 = getArrayControl1.GetPanelS(finalPressedgrid);
myTabPage._panelS.Remove(panelS1);//删除重复
myTabPage._panelS.Insert(dragOverGridIndex, panelS1);//插入数组
如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。
注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。