2011-01-03 2 views
2

특정 ToolStrip 내의 모든 ToolSTripDropDownMenu에서 ImageMargin 및 CheckMargin 속성을 설정하려고합니다.ToolStripDropDownMenu의 ImageMargin 및 CheckMargin 숨기기

System.InvalidCastException : 'System.Windows.Forms.ToolStripDropDownButton를 입력 할 유형의 객체 System.Windows.Forms.ToolStripButton'를 캐스팅 할 수 없습니다

foreach (ToolStripDropDownButton tsd in toolStrip1.Items) 
{ 
    ((ToolStripDropDownMenu)tsd.DropDown).ShowImageMargin = false; 
    ((ToolStripDropDownMenu)tsd.DropDown).ShowCheckMargin = false; 
} 

예외는 다음과 같은 말을 발생합니다 '.

ToolStrip에는 ToolStripDropDownButtons (즉 ToolStripButtons 및 ToolStripLabels) 이외의 컨트롤이 포함되어있어 오류가 발생한 위치를 확인할 수 있습니다. 내가 머리를 감쌀 수없는 것은 ToolStripDropDownButtons 만 수정하는 것입니다. ToolStripDropDownMenu에는 표준 ContextMenu와 달리 기본적으로 CheckMargin 또는 ImageMargin 속성이 없습니다.

답변

4

foreach 문은 필터링을 수행하지 않으므로 입력 양식을 그대로 ToolStripDropDownButton으로 선언하면 시퀀스의 모든 항목을 해당 유형으로 캐스팅하려고 시도합니다. 일부 항목에서는 이것이 불가능하기 때문에 덜 구체적인 유형을 선언하고 원하는 인스턴스를 확인해야합니다.

foreach (ToolStripItem tsi in toolStrip1.Items) 
{ 
    if (tsi is ToolStripDropDownButton) { 
     ToolStripDropDownButton tsd = (ToolStripDropDownButton)tsi; 
     ((ToolStripDropDownMenu)tsd.DropDown).ShowImageMargin = false; 
     ((ToolStripDropDownMenu)tsd.DropDown).ShowCheckMargin = false; 
    } 
}