2012-08-08 5 views
1

콤보 박스 내에서 이미지를 그리는 방법에 대한 많은 질문과 예제가 있습니다. 그러나 콤보 박스 내에서 애니메이션을 그리는 방법을 발견하지 못했습니다.콤보 박스의 그림 애니메이션

내가 사용하는 GIF 애니메이션 (이 투명입니다)입니다 :
enter image description here

내가 달성하고자하는 결과는 다음과 같이 somethink이다 : 나는 윈도우 폼 및 .NET 3.5을 사용하고
enter image description here

.
그 모든 것을 달성하기위한 방법은 다음과 같습니다.
1. ComboBox의 DrawItem 핸들러에서 Graphics.DrawImage를 사용하십시오. 그러나 이미지는 정적으로 그려졌으며 아무런 설명이 없었습니다.
2. PictureBox를 사용하여 애니메이션을 표시 한 다음 크기를 조정하고 ComboBox 위에 놓습니다. 두 번째 soultion를 들어

나는 다음과 같은 코드를 사용 :

pictureBox1 = new PictureBox(); 
pictureBox1.Image = Resource.myImage; 
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; 
//3 is used just for try to fit image into "white" area of ComboBox 
pictureBox1.ClientSize = new Size(comboBox1.Size.Height-3, comboBox1.Size.Height-3); 
pictureBox1.BackColor = System.Drawing.Color.Transparent; 
pictureBox1.Dock = DockStyle.Left; 
pictureBox1.Parent = this.comboBox1; 
pictureBox1.Enabled = true; 
pictureBox1.Visible = true; 

그러나 결과에 내가있어이 :
enter image description here
그것은 애니메이션,하지만의 PictureBox가 콤보 상자의 모서리에 그려진되고 나쁜 보인다 .

그럼, 아무에게 나에게 조언이나 도움을 줄 수 있습니까?

감사합니다.

편집 : 일
내 최종 솔루션 :

pictureBox1 = new PictureBox(); pictureBox1.Image = Resource1.myImage; pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox1.ClientSize = new Size(comboBox1.Size.Height - SystemInformation.Border3DSize.Height, comboBox1.Size.Height - (2 * SystemInformation.Border3DSize.Height)); pictureBox1.BackColor = System.Drawing.Color.Transparent; pictureBox1.Location = new Point(SystemInformation.Border3DSize.Width, SystemInformation.Border3DSize.Height); pictureBox1.Parent = this.comboBox1; pictureBox1.Enabled = true; pictureBox1.Visible = true; 


여러분 모두 감사합니다! 너 나 좀 도와 줘!

+0

ClientSize 대신 PictureBox의 크기를 설정해 보셨습니까? – hometoast

+0

@hometoast 예, 시도했지만 눈에 띄는 변화는 없었습니다. – Apokal

답변

3

에 높이와 너비를 설정합니다

  pictureBox1 = new PictureBox(); 
      pictureBox1.Image = Resource.myImage; 
      pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; 
      //2 is used just for try to fit image into "white" area of ComboBox 
      pictureBox1.ClientSize = new Size(comboBox1.Size.Height - 2, comboBox1.Size.Height - 2); 
      pictureBox1.BackColor = System.Drawing.Color.Transparent; 
      pictureBox1.Left = 1; 
      pictureBox1.Top = 1; 
      pictureBox1.Parent = this.comboBox1; 
      pictureBox1.Enabled = true; 
      pictureBox1.Visible = true; 
+0

주목할 점 : [SystemInformation.BorderSize] (http://msdn.microsoft.com/en-us/library/system.windows.forms.)를 사용하여 추측하는 대신 테두리의 크기를 가져올 수 있습니다. systeminformation.bordersize.aspx]) – hometoast

+0

좋습니다! 고마워요! 나에 대한 좌절과 좌절에 대해 잊어 버렸다. (나는 GUI 프로그래밍에 익숙하지 않아 복잡한 UI는 나에게 지옥이다.) – Apokal

1

도 작을 수 있습니다.도 작지만 콤보 상자의 크기를 pictureBox1.Size = new Size(comboBox1.ItemHeight, comboBox1.ItemHeight)으로 설정하면 적합합니다.

또는이 시도 2*SystemInformation.3DBorderSize

+0

답변 해 주셔서 감사합니다! 솔루션을 시도했지만 ItemHeight가 너무 작습니다 (값이 ComboBox.Size.Height 인 21에 비해 13입니다).하지만 어쨌든 SystemInformation.Border3DSize 주셔서 감사합니다, 나는 그것을 내 마지막 솔루션에 사용! – Apokal

1

는 "독"속성을 설정하는 코드를 제거합니다. 이를 설정하면 레이아웃 관리자가 크기/위치 설정을 무시하게됩니다.

대신 Size 속성과 Location 속성을 특정 값으로 설정하십시오. 같은

뭔가 :

pictureBox3.Size = new Size(comboBox1.Size.Height-3, comboBox1.Size.Height-3); 
pictureBox3.Location = new Point(0, 3); 

당신은 당신이 필요로하는 extact 위치를 얻기 위해 다음을 조정해야 할 수도 있습니다.

+0

이미 6 분 전에 응답했다 ... – ekholm

+1

@ekholm 그렇다고해서 사용자가 대답을 제공 할 수 없다는 의미는 아니다. – LarsTech

+0

동일한 답변을 두 번 제공하는 데 필요한 부분이 보이지 않습니다 ... – ekholm

관련 문제