6

Win Forms アプリケーションのいくつかのボタンに背景画像を追加しようとしています。3 つの画像はサイズが異なります (つまり、ピクセルの寸法が一致しません。1 つは 128x128 で、もう 1 つは 256x256 です)。ボタンのサイズを同じにする必要があります (そうしないと、GUI がひどく非対称になります)。実際の画像ファイルを変更せずに、画像をボタンのサイズに合わせるにはどうすればよいですか?

独自のクラスを作成し、ボタンのサイズ変更イベントのイベント ハンドラーを追加しようとしましたが、うまくいかないようです。私のコード:

class CustomButton : Button {

        internal void CustomButton_Resize( object sender, EventArgs e ) {
            if ( this.BackgroundImage == null ) {
                return;
            }

            var pic = new Bitmap( this.BackgroundImage, this.Width, this.Height );
            this.BackgroundImage = pic;
        }
    }

そして次の形式で:

this.buttonOne.Resize += new System.EventHandler(this.buttonOne.CustomButton_Resize);

言及するのを忘れていましたが、上記のコードは画像のサイズをまったく変更しません。画像を完全に表示するには、ボタンのサイズを変更する必要があります。

4

3 に答える 3

10

プログラムによる簡単な方法

ボタンがあるとしますbtn1。次のコードは、visual-studio-2010 で完全に機能します。

private void btn1_Click(object sender, EventArgs e)
{
    btn1.Width = 120;
    btn1.Height = 100;
}
void btn1_Resize(object sender, EventArgs e)
{
    if ( this.BackgroundImage == null )
          return;
    var bm = new Bitmap(btn1.BackgroundImage, new Size(btn1.Width, btn1.Height));
    btn1.BackgroundImage = bm;
}

より良い方法

custombutton のコンストラクターに eventHandler を追加できます (イベントハンドラーを正しく追加していることを確認するためだけです)。

class CustomButton : Button
{    
    CustomButton()
    {
        this.Resize += new System.EventHandler(buttonOne.CustomButton_Resize);
    }
    void CustomButton_Resize( object sender, EventArgs e )
    {
       if ( this.BackgroundImage == null )
          return;
       var pic = new Bitmap( this.BackgroundImage, new Size(this.Width, this.Height) );
       this.BackgroundImage = pic;          
    }
}

ここで、ボタンのサイズを変更すると、画像が新しいサイズに収まります (スケーリングされます)。

于 2012-11-13T12:41:51.987 に答える
1

このようなものから始めることができます...

 public class ImageButton : Control
{
    public Image backgroundImage;

    public Image BackgroundImage
    {
        get
        {
            return backgroundImage;
        }
        set
        {
            backgroundImage = value;
            Refresh();
        }
    }

    public ImageButton()
    {

    }

    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.Clear(BackColor);

        if(BackgroundImage != null)
            e.Graphics.DrawImage(BackgroundImage, 0, 0, Width, Height);

        base.OnPaint(e);
    }

    protected override void OnPaintBackground(PaintEventArgs pevent)
    {
        //base.OnPaintBackground(pevent);
    }
}

ペイントを処理して自分でイメージを描くことができます。また、PictureBox や、より多くのスケーリング オプションを持つ他のコントロールを使用してみてください。

于 2012-11-13T08:36:42.453 に答える