newbie1992 Ответов: 2

Как проверить элементы управления содержат панель или нет


привет,
как проверить форму. элементы управления содержат панель или нет

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

это то, что я попробовал, и результат таков
когда я нажимаю на кнопку, она продолжает добавлять новый уровень контроля

Что я уже пробовал:

var myButton = new Button {new Size (50, 50), new Point(0,0)};
// add myButton to form.controls
myButton.mouseClick += buttonClicked;
controls.Add(myButton);

private void buttonClicked(object sender, eventArgs e){
var myPanel = new Panel() {new Size(50, 50), new Point(100,100)};
if ( ! ( controls.Contain(myPanel) ) {
controls.Add(myPanel);
controls.SetChildIndex(myPanel, 0);
}
else {
controls.RemoveAt(0);
myPanel.Dispose();
}
}

2 Ответов

Рейтинг:
2

Dave Kreskowiak

В событии нажатия кнопки вы создаете элемент управления, не добавляя его ни к чему, а затем проверяете, содержит ли его другой элемент управления. Что ж, этот ответ всегда будет ложным.

Вы создали экземпляр элемента управления, но никогда не добавляли его ни к чему, включая форму, в которой вы пытаетесь его отобразить. Элемент управления не появляется автоматически при создании!

Ваш if утверждение совершенно бесполезно. Все, что вам нужно сделать, это просто добавить новый экземпляр элемента управления в коллекцию элементов управления элемента управления или формы, в которой вы хотите его разместить, а затем установить его ChildIndex так, как вы хотите. Вот и все. Проверять нечего.


Рейтинг:
0

Graeme_Grant

var myPanel = new Panel() {new Size(50, 50), new Point(100,100)};
if ( ! ( controls.Contain(myPanel) ) {


Ответ заключается в том, что "новая панель" всегда будет отсутствовать в коллекции элементов управления до ее добавления. Каждый объект, а не только элементы управления, получает уникальный идентификатор при создании. таким образом," новизна " объекта всегда будет ложной. Что вам нужно сделать, так это проверить "тип объекта", чтобы увидеть, есть ли уже "тип панели" в коллекции. что-то вроде (непроверено):
if (!controls.Any(x => x is Panel))
{
    var myPanel = new Panel() {new Size(50, 50), new Point(100,100)};
    controls.Add(myPanel);
    controls.SetChildIndex(myPanel, 0);
}