0

私がWindowsC#フォーラムで取り組んでいるボタン効果について誰かが私を助けてくれるかどうか疑問に思っていました。

したがって、ボタンを作成するための2つの類似した画像があります。1つは背景が光る画像で、もう1つは背景が光らない画像です。正常に動作するボタンに効果を与えるために使用mouseEnter(glow)しています。mouseLeave(normal)

同じフォームに8つの異なるボタンがあり、そのために異なる画像があります。

ボタン、つまりグロー効果をマウスクリックした後もmouseEnterイベントを続行したいのですが、正しい解決策を得ることができません。また、別の(次の)ボタンをクリックすると、光っていたボタンが通常の状態に戻るはずです。

誰かが私を正しい方向に向けることができるかどうか疑問に思っていましたが、オンラインで少し検索しても解決策を思い付くことができませんでした。

private void btnSong1_MouseEnter(object sender, EventArgs e)
{
    this.btnSong1.BackgroundImage = 
        ((System.Drawing.Image)(Properties.Resources.satisfactionH));
}

private void btnSong1_MouseLeave(object sender, EventArgs e)
{
    this.btnSong1.BackgroundImage = 
        ((System.Drawing.Image)(Properties.Resources.satisfaction));
}

private void btnSong1_Click(object sender, EventArgs e)
{
    nowPlaying1.Visible = Enabled;
    nowPlaying2.Visible = false;
    nowPlaying5.Visible = false;

    this.btnSong1.BackgroundImage = 
        ((System.Drawing.Image)(Properties.Resources.satisfactionH));

    axWindowsMediaPlayer1.URL = 
        @"C:\MediaFile\music\ArethaFranklin\(I Can't Get No) Satisfaction.mp3";
}

private void btnSong2_Click(object sender, EventArgs e)
{
    this.btnSong1.BackgroundImage = 
        ((System.Drawing.Image)(Properties.Resources.satisfaction));
    axWindowsMediaPlayer1.URL = @"C:\MediaFile\music\ArethaFranklin\Come To Me.mp3";
    nowPlaying1.Visible = false;
    nowPlaying2.Visible = Enabled;
    nowPlaying5.Visible = false;
} 
4

1 に答える 1

1

独自の buttonClass を使用してみましたか。簡単なデモを行いましたGlowingButton。クリックで特定の songUrl を再生し、マウス入力で光り、離れるかクリックで背景をリセットします。

// don't forget: using System.Runtime.InteropServices;
class GlowingButton : System.Windows.Forms.Button
{
    [DllImport("winmm.dll")]
    private static extern long mciSendString(string strCommand,
                                             StringBuilder strReturn,
                                             int iReturnLength,
                                             IntPtr hwndCallback);

    public string SongURL { get; set; }
    public GlowingButton() : base()
    {
        this.BackgroundImage = Winforms_Demo.Properties.Resources.bg;
        this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
    }
    protected override void OnMouseEnter(EventArgs e)
    {
        base.OnMouseEnter(e);
        this.BackgroundImage = Winforms_Demo.Properties.Resources.bgGlow;
    }
    protected override void OnMouseLeave(EventArgs e)
    {
        base.OnMouseLeave(e);
        this.BackgroundImage = Winforms_Demo.Properties.Resources.bg;
    }
    protected override void OnClick(EventArgs e)
    {
        base.OnClick(e);
        this.BackgroundImage = Winforms_Demo.Properties.Resources.bg;

        if (!string.IsNullOrEmpty(SongURL))
        {
            mciSendString("open \"" + SongURL + "\" type mpegvideo alias MediaFile", null, 0, IntPtr.Zero);
            mciSendString("play MediaFile", null, 0, IntPtr.Zero);
        }
    }
}

フォーム内で行う必要があるのは、glowingButtonごとに songUrlを設定することだけです(デザイナーまたはソース内で)。

于 2012-08-17T15:26:42.353 に答える