2017-04-11 3 views
1

다른 레이블보다 내 레이블 "날짜"를 배치하려고합니다. 그러나 나는 정말로 그것에 고심하고있다. bringToFront와 sendToBack을 사용하여 시도했지만 어느 것도 작동하지 않았습니다. 내 목표는 날짜 표시가 앞에 있다는 것입니다.내 레이블의 z 위치를 변경할 수 없습니다.

코드 :

  //Create Fill Panels 
      createFillPanels(); 

      //Create Panel 
      Panel test = new Panel(); 
      count++; 
      //Fill Panel 
      test.Name = "panel" + i; 
      test.Width = 245; 
      test.Height = 170; 
      test.BackColor = Color.White; 
      Label date = new Label(); 
      if(i >= 9) 
      { 
       int description = i + 1; 
       date.Text = description.ToString(); 
      } 
      else 
      { 
       int description = i + 1; 
       date.Text = 0 + description.ToString(); 
      } 

      //Create Label 

      string day = date.Text; 
      string year = DateTime.Now.Year.ToString(); 
      string month = tbMonat.Text; 
      string stringDate = day + "." + month + "." + year; 
      DateTime dt = Convert.ToDateTime(stringDate); 

      if (dt.DayOfWeek == DayOfWeek.Sunday) 
      { 
       test.BackColor = Color.LightGray; 
      } 

      //Label frühschicht 
      Label frühschicht = new Label(); 
      string frühschichtText = datenbank.panelBefüllen(tag, monat, jahr, "Frühschicht", null, null, null, null); 

      if(frühschichtText != null) 
      { 
       frühschicht.Text = "Frühschicht: " + frühschichtText; 
       frühschicht.ForeColor = Color.Black; 
       frühschicht.Width = 215;    } 
      frühschicht.Location = new System.Drawing.Point(frühschichtlocationX, frühschichtlocationY); 

      date.Location = new System.Drawing.Point(datelocationX, datelocationY); 
      foreach (Control c in this.Controls) 

       if (frühschicht.Text.Contains("Offe")) 
       { 
        frühschicht.BackColor = Color.LightPink; 

        fehlercount++; 
       } 
      frühschicht.SendToBack(); 
      test.Controls.Add(frühschicht); 
      date.BringToFront(); 
      test.Controls.Add(date); 
      flowLayoutPanel1.Controls.Add(test); 
      test.Show(); 

      //Label spätschicht 
      Label spätschicht = new Label(); 
      string spätschichtText = datenbank.panelBefüllen(tag, monat, jahr, "Spätschicht", null, null, null, null); 

      if (spätschichtText != null) 
      { 
       spätschicht.Text = "Spätschicht: " + spätschichtText; 
       spätschicht.ForeColor = Color.Black; 
       spätschicht.Width = 215; 
      } 
      spätschicht.Location = new System.Drawing.Point(spätschichtlocationX, spätschichtlocationY); 
      spätschicht.SendToBack(); 
      test.Controls.Add(spätschicht); 
      date.Location = new System.Drawing.Point(datelocationX, datelocationY); 
      date.BringToFront(); 
      foreach(Control c in this.Controls) 

      if(spätschicht.Text.Contains("Offe")) 
      { 
        spätschicht.BackColor = Color.LightPink; 
        fehlercount++; 
      } 

      test.Controls.Add(date); 
      flowLayoutPanel1.Controls.Add(test); 
      test.Show(); 

사진 : How it looks like at the moment

+0

'test'객체에 추가하지 않고 날짜를 앞쪽으로 옮겼습니다. –

+0

테스트 객체에 추가 한 후에 이미 시도했습니다. 이렇게 : test.Controls [frühschicht.Name] .SendToBack(); 하지만 방금 NullReferenceException을주었습니다. 내가 잘못 했니? – CallMeLeonardo

+0

... 물론 bringToFront와 함께 날짜와 동일합니다 ... – CallMeLeonardo

답변

2

Z 순서는 항상이 설정 될 때 상위에 존재하는 모든 컨트롤을 기준으로 설정됩니다. 따라서 추가하지 않은 컨트롤로 설정할 수 없습니다. 더 많은 컨트롤이 추가 된 후에도 계속 작동하지 않습니다.

그래서 모든 경쟁 컨트롤을 추가 한 후에 Z 오더를 으로 설정해야합니다.