0

ボタンをクリックすると、マウスを押した時間に応じてリンクされたメモが印刷されるようにプログラムを作成しています。私の問題は、最初のクリックが正常に機能することですが、2回押し続けると更新されず、頭がおかしくなります。どんな助けでも大歓迎です。以下に、私が使用している次のコードを示します。ありがとう

Form1の場合:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace NoteShape
{
    public partial class Form1 : Form
    {
        public int duration = 0;
        MusicNote mn;

        public Form1()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            duration++;
        }

        private void button1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                timer1.Enabled = true;
                duration = 0;
            }
        }

        private void button1_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                timer1.Enabled = false;
            }
            duration = duration % 20;

            string bNoteShape = "";

            if (duration >= 12)
            {
                bNoteShape = "SemiBreve";
            }

            if ((duration >= 6) && (duration <= 11))
            {
                bNoteShape = "Minim";
            }

            if ((duration >= 3) && (duration <= 5))
            {
                bNoteShape = "Crotchet";
            }

            if ((duration >= 1) && (duration <= 2))
            {
                bNoteShape = "Quaver";
            }

            if (duration == 0)
            {
                bNoteShape = "SemiQuaver";
            }


            mn = new MusicNote(1, bNoteShape);
            MessageBox.Show(bNoteShape);
            this.Controls.Add(this.mn);

        }
    }
}

対応するクラスの場合:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace NoteShape
{
    class MusicNote: PictureBox
    {
        public string path = "ImagesName\\";
        public int pitch;
        public string noteShape;

        public MusicNote(int iPitch, string iNoteShape) : base()
        {
            pitch = iPitch;
            noteShape = iNoteShape;

            Location = new Point(150, 50);
            Size = new Size(40, 40);
            Bitmap bmp1 = new Bitmap(path + noteShape + ".bmp");
            Image = bmp1;
            BackColor = Color.Transparent;
        }

        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
        }
    }
}
4

2 に答える 2

0

新しいノートを作成していますが、毎回同じ位置に配置しています。

既存の/クリックされたメモを編集するか、新しいメモを配置する必要があります。

于 2012-12-21T13:35:29.753 に答える
0

VisualStudio2010でコードを「そのまま」試してみましたが問題ありません。変更したのは、ビットマップがなかったのでコメントすることだけでしたが、背景色を黒に選択して表示しました。

 //Bitmap bmp1 = new Bitmap(path + noteShape + ".bmp");
 //Image = bmp1;
 BackColor = Color.Black;

また、あなたの間隔がわからなかったので、500ミリ秒の間隔でtimer1を配置しました。

私はそれを何度も繰り返すことができ、メッセージボックスは正しいものでポップします!今はまったく問題がないので、もう一度試してみたり、コードを更新したりできますか。

編集

これをbutton1_MouseUpに追加する必要があります

this.Controls.Add(mn);
mn.BringToFront();

ピクチャーボックスは前のものの後ろに描かれました。

于 2012-12-21T14:50:18.083 に答える