Windows :: Forms :: Control нарисован в (0,0) неправильно - PullRequest
1 голос
/ 22 апреля 2011

Местоположение контейнера элемента управления игнорируется, а элемент управления окрашивается в (0,0) в форме.

Контейнер представляет собой панель с местоположением, установленным на (26,26)

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

Если я выполняю тот же код, когда панель видимая, она работает правильно.

Я не вижу никакой разницы в моей трассировке между двумя делами.

У кого-нибудь есть идеи относительно того, как мне избежать этой ' функции '?

Resize :: Layout - это просто оболочка для вызова соответствующей функции в зависимости от типа:

void Resize::Layout(System::Windows::Forms::Control^ Ctrl)
{
  SMSG(String::Format("Resize::Layout {0} ({1}) {2}{3}",
    Ctrl->Name, Ctrl->GetType()->ToString(), Ctrl->Location.ToString(),
    Ctrl->ClientRectangle.Size.ToString()),true);
  // resize the Resize... controls
  if (Ctrl->GetType()->ToString() == "Custom.ResizeLabel")
  {
    safe_cast<Custom::ResizeLabel^>(Ctrl)->Layout();
  }
  else if (Ctrl->GetType()->ToString() == "Custom.ResizePanel")
  {
    safe_cast<Custom::ResizePanel^>(Ctrl)->Layout(Ctrl, true);
  }
  else if(Ctrl->GetType()->ToString() == "Custom.ResizeTabControl")
  {
    safe_cast<Custom::ResizeTabControl^>(Ctrl)->Layout(Ctrl, true);
  }
  else LayoutCtrl(Ctrl);
  SMSG(String::Format("Resize::Layout {0} ({1}) {2}{3}", Ctrl->Name,
    Ctrl->GetType()->ToString(), Ctrl->Location.ToString(),
    Ctrl->ClientRectangle.Size.ToString()),false);
}

Вот моя трассировка для неудачного случая: Location и ClientSize - это трассируемые значения.ClipRectangle в событии OnPaint отличается.

UnderneathButton и OnTopButton содержатся в HomeButtonsPanel.

HomeButtonsPanel содержится в HomePanel.

HomePanel содержится в HomePanelBorder.

HomePanelBorder содержится в HomeTab.

HomeTab содержится в FormTabs.

FormTabs содержится в FormTabsPanel.

FormTabsPanel содержится в FormPanel.

FormPanel содержится в Form1.

Resize::Layout HomeButtonsPanel (System.Windows.Forms.Panel) {X=66,Y=68}{Width=75,Height=52}
Resize::Layout UnderneathButton (System.Windows.Forms.Button) {X=0,Y=29}{Width=75,Height=23}
Resize::Layout UnderneathButton (System.Windows.Forms.Button) {X=0,Y=29}{Width=75,Height=23}
Resize::Layout OnTopButton (System.Windows.Forms.Button) {X=0,Y=3}{Width=75,Height=23}
Resize::Layout OnTopButton (System.Windows.Forms.Button) {X=0,Y=3}{Width=75,Height=23}
Resize::Layout HomeButtonsPanel (System.Windows.Forms.Panel) {X=66,Y=68}{Width=75,Height=52}
HomePanel::Layout Height set - {X=0,Y=0}{Width=253,Height=125}
Resize::Layout HomePanel (Custom.ResizePanel) {X=0,Y=0}{Width=253,Height=125}
HomePanelBorder::Layout Height set - {X=0,Y=0}{Width=253,Height=125}
Resize::Layout HomePanelBorder (Custom.ResizePanel) {X=0,Y=0}{Width=253,Height=125}
Resize::Layout HomeTab (System.Windows.Forms.TabPage) {X=4,Y=25}{Width=255,Height=127}
FormTabs::Layout Height set - {X=0,Y=0}{Width=263,Height=156}
Resize::Layout FormTabs (Custom.ResizeTabControl) {X=0,Y=0}{Width=263,Height=156}
FormTabsPanel::Layout Height set - {X=26,Y=26}{Width=263,Height=156}
Resize::Layout FormTabsPanel (Custom.ResizePanel) {X=26,Y=26}{Width=263,Height=156}
FormPanel::Layout Height set - {X=0,Y=0}{Width=315,Height=182}
*** FormPanel - OnSizeChanged:{X=0,Y=0}{Width=315,Height=182}
Resize::Layout FormPanel (Custom.ResizePanel) {X=0,Y=0}{Width=315,Height=182}
Resize::Layout Form1 (EasyButtons.Form1) {X=24,Y=0}{Width=315, Height=208}
*** FormPanel - OnPaint:{X=0,Y=0}{Width=315,Height=182} Clip - {X=26,Y=0,Width=289,Height=182}

Вот моя трассировка для успешного случая!

Resize::Layout HomeButtonsPanel (System.Windows.Forms.Panel) {X=66,Y=68}{Width=75,Height=52}
Resize::Layout UnderneathButton (System.Windows.Forms.Button) {X=0,Y=29}{Width=75,Height=23}
Resize::Layout UnderneathButton (System.Windows.Forms.Button) {X=0,Y=29}{Width=75,Height=23}
Resize::Layout OnTopButton (System.Windows.Forms.Button) {X=0,Y=3}{Width=75,Height=23}
Resize::Layout OnTopButton (System.Windows.Forms.Button) {X=0,Y=3}{Width=75,Height=23}
Resize::Layout HomeButtonsPanel (System.Windows.Forms.Panel) {X=66,Y=68}{Width=75,Height=52}
HomePanel::Layout Height set - {X=0,Y=0}{Width=253, Height=125}
Resize::Layout HomePanel (Custom.ResizePanel) {X=0,Y=0}{Width=253,Height=125}
HomePanelBorder::Layout Height set - {X=0,Y=0}{Width=253,Height=125}
Resize::Layout HomePanelBorder (Custom.ResizePanel) {X=0,Y=0}{Width=253,Height=125}
Resize::Layout HomeTab (System.Windows.Forms.TabPage) {X=4,Y=25}{Width=255,Height=127}
FormTabs::Layout Height set - {X=0,Y=0}{Width=263,Height=156}
Resize::Layout FormTabs (Custom.ResizeTabControl) {X=0,Y=0}{Width=263,Height=156}
FormTabsPanel::Layout Height set - {X=26,Y=26}{Width=263,Height=156}
Resize::Layout FormTabsPanel (Custom.ResizePanel) {X=26,Y=26}{Width=263,Height=156}
FormPanel::Layout Height set - {X=0,Y=0}{Width=315,Height=182}
*** FormPanel - OnSizeChanged:{X=0,Y=0}{Width=315,Height=182}
Resize::Layout FormPanel (Custom.ResizePanel) {X=0,Y=0}{Width=315,Height=182}
Resize::Layout Form1 (EasyButtons.Form1) {X=24,Y=0}{Width=315,Height=208}
*** FormPanel - OnPaint:{X=0,Y=0}{Width=315, Height=182} Clip - {X=0,Y=26,Width=315,Height=156}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...