2014-02-09 4 views
0

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

public void CreateCard(Card card) 
{ 
    CardGUI topCard = new CardGUI(card); 

    topCard.Location = new Point(50, 50); 

    aPanel.Controls.Add(topCard); 

    DrawPlacement(topCard); 
} 

public void DrawPlacement(CardGUI cardGui) 
{ 
    cardGui.Location = new Point(a, b); 

    a += 18; // Space the cards 

    // Put the cards on a new line after half have been laid out. 
    counter++; 
    if (counter == 26) 
    { 
     a = 140; 
     b = 130; 
    } 

    this.Update(); 
    aPanel.Controls.Add(cardGui); 

    cardGui.BringToFront(); 
} 

Моя проблема заключается в том, что я хочу, как контроль добавлен к панели в CreateCard, а также элементы управления, добавленные в DrawPlacement, чтобы показать. Но контроль в CreateCard не отображается, как предполагалось. Я обнаруживаю, если прокомментировать звонок DrawPlacement, так что я думаю, что это связано с свойством Location?

Я пробовал все виды вещей, но пока ничего не работало.

+0

где вы определяете a и b? – elyashiv

+0

Они определены глобально. Легче было сбросить их, когда я начинаю новую колоду (я думал). –

ответ

1

Объект типа CardGUI, который вы добавляете в DrawPlacement, совпадает с тем, который добавлен в CreateCard, поэтому добавление его ничего не делает.

Если вы хотите, чтобы 2 раза один и тот же объект находился в том же положении, вы должны создать еще один CardGUI, который выглядит точно так же, как первый в DrawPlacement вместо того, чтобы манипулировать исходным объектом.

public void CreateCard(Card card) 
    { 
     CardGUI topCard = new CardGUI(card); 

     topCard.Location = new Point(50, 50); 

     aPanel.Controls.Add(topCard); 

     DrawPlacement(card); 
    } 

    public void DrawPlacement(Card card) 
    { 
     CardGUI cardGui = new CardGUI(card); 
     cardGui.Location = new Point(a, b); 

     a += 18; // Space the cards 

     // Put the cards on a new line after half have been laid out. 
     counter++; 
     if (counter == 26) 
     { 
      a = 140; 
      b = 130; 
     } 

     this.Update(); 
     aPanel.Controls.Add(cardGui); 

     cardGui.BringToFront(); 
    } 
+0

Карта не должна находиться в том же месте. Первая карта должна представлять колоду и должна быть выложена в CreateCard в месте, расположенном слева от панели. Затем, хотя они еще не включены должным образом, карты должны быть выведены из колоды и расположены справа от колоды, один за другим со смещением (a + = 18), пока колода не будет пуста. Эта последняя часть работает, она показывает «колоду», которая не работает. Но я теперь кое-где с изменениями, которые вы мне дали, я думаю, что смогу заставить его работать сейчас, спасибо :) –

+0

Нам не хватает кода здесь, вы должны показать больше того, что вы сделали или объяснили ваша проблема лучше. Метод 'CreateCard' в исходном вопросе Создайте ** один ** объект карты и поместите его где-нибудь под' aPanel', и нет кода для создания колоды или размещения чего-либо в другой позиции, чем 'a, b' (часть, где вы устанавливаете '50,50' бесполезно, поскольку оно заменено позже) –

+0

Вы уже помогли мне решить мою текущую проблему. Но первый элемент управления, который находится на (50,50), представляет собой колоду, и нужно видеть только верхнюю карту. Это был тот, который я не мог видеть, и теперь я могу с твоими изменениями. Мне нужен только один элемент управления, поэтому, хотя я не уверен, что он работает, я также добавил aPanel.Controls.Remove (topCard) перед добавлением одного. По крайней мере, это не дает ошибки. Так что да, в моем исходном коде 50,50 было бесполезно, поэтому я не мог видеть контроль. –

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