아마도 C# 및 WebControl
의 동작에 대한 아주 기본적인 질문 일 것입니다. 나는이 방법을 사용하고 있지만 차이점이 어디에 있는지 명확히 할 수 있다면 좋을 것이다.List가 <Control> 인 경우 이전 상위 컨트롤에서 컨트롤이 제거되었지만 그 이유는 무엇입니까?
는
전에 나는 주어진 키 (GUID)와 Panel
와 사전을 가지고있다.
var tmpFormButtonPanel = new Panel();
_formButtonPanelDict.TryGetValue(new Guid(_hiddenField.Value), out tmpFormButtonPanel);
이 패널에는 WebControl
이 포함되어 있습니다. 이제이 버튼을 다른 패널에 할당하고 싶습니다.
if (tmpFormButtonPanel != null)
{
var tmpControls = new List<Button>();
foreach (Button tmpButton in tmpFormButtonPanel.Controls)
{
tmpControls.Add(tmpButton);
}
tmpControls.Reverse();
foreach (var tmpButton in tmpControls)
{
tmpButton.AddCssClass("xy");
_buttonPanel.Controls.Add(tmpButton);
}
}
나는 _buttonPanel
에있는 버튼을 추가하는 순간, 그것은 tmpFormButtonPanel
에서 버튼을 삭제합니다. 내가 읽거나 들었던 것에서, WebControl은 하나의 패널에만 할당 될 수 있습니다. 그래서 이것이 작동하지 않는 이유를 설명 할 것입니다.
그래서이 코드를 변경했습니다.
var tmpFormButtonList = new List<ButtonBaseUc>();
if (!_formButtonDict.TryGetValue(new Guid(_hiddenField.Value), out tmpFormButtonList))
{
tmpFormButtonList = new List<ButtonBaseUc>();
_formButtonDict.Add(new Guid(_hiddenField.Value), tmpFormButtonList);
}
foreach (var tmpButton in tmpFormButtonPanel.Controls)
{
if (tmpButton is ButtonBaseUc)
{
tmpFormButtonList.Add((ButtonBaseUc)tmpButton);
}
}
마지막 부분은 같은 일을하지만, tmpFormButtonList
합니다.
if (tmpFormButtonList!= null)
{
var tmpControls = new List<Button>();
foreach (Button tmpButton in tmpFormButtonList)
{
tmpControls.Add(tmpButton);
}
tmpControls.Reverse();
foreach (var tmpButton in tmpControls)
{
tmpButton.AddCssClass("xy");
_buttonPanel.Controls.Add(tmpButton);
}
}
이것은 작동 중입니다. 하지만 왜? 새 패널에 단추를 추가하기 전에 단추를 다른 목록에 지정하는 중입니다. 참고 문헌은 여전히 동일합니다. 내가 뭘 놓치고 있니?
두 번째 접근 방식에서 왜 작동하는지 잘 모르겠습니다. 어쨌든 왜이 버튼 웹 컨트롤을 첫 번째 패널에서 제거하지 않고 panel1에서 panel2로 이동해야합니까? 사전의'tmpFormButtonList' 패널에서 여전히 필요로하는 이유는 무엇입니까? 그런 다음 컨테이너에'Control'을 쓰지 말고'List'를 사전에 대한'Value'로 사용하십시오. –
@TimSchmelter 아아, 그 차이가 있습니다. 두 번째 접근법에서는 패널 대신 목록을 사용합니다! 그게 내가 놓친거야. 감사! –
greenhoorn