1

コンボボックス内で画像を描画する方法については、すでに回答済みの質問と例がたくさんあります。しかし、コンボボックス内でアニメーションを描画する方法の例は見つかりませんでした。

私が使用するgifアニメーションは次のとおりです(透明です):
ここに画像の説明を入力

そして、私が達成したい結果は、次のようなものです。
ここに画像の説明を入力

Windows フォームと .Net 3.5 を使用しています。
私が考えたそれを達成するためのすべての方法は次のとおり
です。 1. ComboBox の DrawItem ハンドラで Graphics.DrawImage を使用します。しかし、画像は静的に描画され、アニメーションはありませんでした。
2. PictureBox を使用してアニメーションを表示し、サイズを変更して ComboBox の上に配置します。

2 番目の解決策として、次のコードを使用しました。

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;

しかし、結果として、これは
ここに画像の説明を入力
アニメーション化されていますが、ピクチャボックスは ComboBox の端に描画されており、見栄えが悪いです。

それで、これを達成するためのアドバイスや助けをくれる人はいますか?

ありがとうございました。

編集:
うまくいった私の最終的な解決策:

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;

皆さん、ありがとうございました!あなたは私をたくさん助けてくれます!

4

3 に答える 3

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;
于 2012-08-08T12:47:33.150 に答える
1

「Dock」プロパティを設定するコードを削除します。これを設定すると、レイアウトマネージャーはサイズ/場所の設定を無視します。

代わりに、SizeプロパティとLocationプロパティを特定の値に設定します。

何かのようなもの:

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

必要な正確な位置を取得するには、これらを調整する必要がある場合があります。

于 2012-08-08T12:53:23.213 に答える
1

その場合は少し小さすぎるかもしれませんが、コンボボックスのサイズをに設定すると収まりますpictureBox1.Size = new Size(comboBox1.ItemHeight, comboBox1.ItemHeight)

または、高さと幅をに設定します2*SystemInformation.3DBorderSize

于 2012-08-08T12:47:05.480 に答える