문제

나는 MDI 양식을 중심으로 배경 이미지입니다.
각 사용자 크기를 변경 또는 상태의 양식의 이미지를 업데이트되지 않습니다.남아에 오래된 장소(지 않을 중심으로 더 이상)도 잃었을 때 양식을 너무 작습니다.

어떻게 이런 상황이 올바르게 처리할?
나는 진짜로 있을 부르는"이다.새로고침()"에서 모든 이벤트를 처리기와 관련된 형태로 크기 및 상태?

응용 프로그램을 실현합니다.net3.5SP1C#하도록 만드는 경우가 있습니다.Forms.

도움이 되었습니까?

해결책

불행하게도 있을 것 같지 않는 슈퍼 빠른 방법이지만,그 다음은 나의 솔루션에 적어도하지 않는 것에 의존하고 우연이 아니다.

에서 mdi 를 생성자,처리정:

this.ResizeEnd += delegate { this.Refresh(); };

고 그런 다음 이를 재정의하여 처리 극대화/복원 이벤트

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == Win32.WM_SYSCOMMAND)
        {
            int test = m.WParam.ToInt32() & 0xFFF0;
            switch (test)
            {
                case Win32.SC_MAXIMIZE:
                case Win32.SC_RESTORE:
                    this.Invalidate();  // used to keep background image centered
                    break;
            }
        }
        base.WndProc(ref m);
    }

상수 값에는 다음과 같이 정의됩니다.

    public const int WM_SYSCOMMAND =                    0x0112;
    //wparam for WM_SYSCOMMAND should be one of these after masking with 0xFFF0:
    public const int SC_RESTORE =                       0xF120;
    public const int SC_MINIMIZE =                      0xF020;
    public const int SC_MAXIMIZE =                      0xF030;

다른 팁

당신이 할 수 있는 모든,또는 당신은 단지 넣 me.refresh 에서 MDI 의 resize 이벤트입니다.

전화 PositionContainersToParentMiddle 방법에서 크기를 조정하는 이벤트의 MDI 형태입니다.그것을 테스트하지 않았습지만,그것은 작업해야 합니다.수도 있습을 넣어 조건의 크기를 조정 이벤트가 이미지를 정지한 위치를 변경에서 모든 크기를 조정합니다.

   private void YourMDI_Resize(object sender, EventArgs e)
    {
        PositionContainersToParentMiddle();
    }

    private void PositionContainersToParentMiddle()
    {
        int iInitX = (ParentOfImage.Size.Width - YourImage.Size.Width) / 2;
        int iInitY = ( ParentOfImage.Location.Y + YourImage.Size.Height ) / 2;
        YourImage.Location = new Point( iInitX, iInitY ) ;

    }
Private Sub YourMDIFormName_Resize(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Resize
    Me.BackgroundImage = My.Resources.YourBackgroundImageName
    Me.Refresh()
 End Sub
    private void Change_BackgroundImage(string _path)
  {
    string imagepath = _path;
    System.IO.FileStream fs;
 // MDI Form image background layout change her`enter code here`e     
 //(Remember control imagebakground layout take default form background layount )
          this.BackgroundImageLayout = ImageLayout.Center;
            // Checking File exists if yes go --->
            if (System.IO.File.Exists(imagepath))
            {
              // Read Image file
              fs = System.IO.File.OpenRead(imagepath);
                fs.Position = 0;
                // Change MDI From back ground picture
                foreach (Control ctl in this.Controls)
                {
                    if (ctl is MdiClient)
                    {
                      //ctl.BackColor = Color.AntiqueWhite;
                       ctl.BackColor = Color.FromArgb(31, 26, 23);
                       ctl.BackgroundImage = System.Drawing.Image.FromStream(fs);
                      break;
                       }
                  }
             }
          }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top