2016-11-04 2 views
0

я не получаю вариант .Image, когда я применяю этот код:Удаление всех изображений в контрольной группе

foreach(Control b in _SelectionPanel.Controls) 
{ 
    if (b is Button) 
    { 
     b.Image = null; 
    } 
} 

Однако, я могу получить опцию «Видимый»:

foreach(Control b in _SelectionPanel.Controls) 
{ 
    if (b is Button) 
    { 
     b.Visible = false; 
    } 
} 

Я пытаюсь удалить все изображения с кнопок в группе управления. Есть идеи?

+0

Это winforms? Как бы то ни было, если 'Control' не имеет свойства« Image », но фактический тип времени выполнения' b', вам нужно указать ссылку на фактический тип времени выполнения. –

+0

'(b как кнопка) .Image = null;' –

+0

L.B: Это, к сожалению, не работает. –

ответ

2

is проверяет только тип кнопки.

Вы хотите использовать as для выполнения фактического акта, что позволит вам получить доступ к свойствам кнопки. Если приведение недействительно, вы просто получите ссылку null, поэтому просто выполните команду as, а затем проверьте, не изменилась ли ваша переменная до ее использования.

foreach(Control b in _SelectionPanel.Controls) 
{ 
    Button castB = b as Button; 
    if (castB != null) 
    { 
     castB.Image = null; 
    } 
} 
+0

Ты избил меня. Твоего ответа не было, когда я начал писать. –

+0

Это работает. Большое спасибо. Я приму этот ответ, когда предел уйдет. –

+0

Matheus Rocha: Спасибо в любом случае! :-) –

1

В контексте вашего цикла, b является контроль. Даже после проверки. Для того, чтобы получить свойство изображения, вы должны привести его к типу Button:

foreach(Control b in _SelectionPanel.Controls) 
{ 
    if (b is Button) 
    { 
     ((Button)b).Image = null; 
     //Alternatively 
     (b as Button).Image = null; 
    } 
} 
1
foreach(var b in _SelectionPanel.Controls.OfType<Button>()) 
{ 
    ((Button)b).Image = null; 
} 

Вы можете перебирать элементы управления кнопки типа только, а затем явно брошен вар к кнопке.

+0

Вы также можете использовать 'foreach (Button b в _selectionPanel.Controls.OfType

+1

Спасибо, на самом деле я этого не знал, просто чтобы избежать ошибки компиляции (я думал, что это даст ошибку), я написал, что –

Смежные вопросы