webForumDet fria alternativet

Problem med WM_KEYUP & Tangent

.NET

0 svar · 377 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

På Codeproject så hittade jag en kontroll som var avsed som pianotangenter
http://www.codeproject.com/KB/miscctrl/LesStPianoKey.aspx
Det ser väldigt snyggt ut. Det enda som jag vill använda de till är att visa
ackord, dvs button33.KeyDown. Vad som händer då är att tangenten byter
färg.

Jag fick ett tips för något år sedan att använda mig av:

using System.Runtime.InteropServices;
const int WM_KEYUP = 0x101;
        const int WM_KEYDOWN = 0x100;
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern IntPtr SendMessage(IntPtr hWnd,
            int msg,
            IntPtr wParam,
            IntPtr lParam);
//sen för att användas
SendMessage(button48.Handle, WM_KEYDOWN, new IntPtr(32), new IntPtr(0));

När jag sen startar applikationen så skulle ju denna tangent vara nedtryckt,
men ingenting händer och inga fel.
Sen tänkte jag att det kanske vore bättre och lägga det i en array:

private Multimedia.UI.PianoKey[] Tangent;
Tangent = new Multimedia.UI.PianoKey[40 - 1];
            
            Tangent[0] = button33;
            Tangent[1] = button34;
            Tangent[2] = button35;
            Tangent[3] = button36;
            Tangent[4] = button37;osv
//och använder
SendMessage(Tangent[15].Handle, WM_KEYDOWN, new IntPtr(32), new IntPtr(0));
Tangent[15].Text = "C";

Likadant ingenting händer, och inga fel.
Nu finns det en egenskap som blir

Tangent[22].KeyDown

..och här får jag error

The event 'System.Windows.Forms.Control.KeyDown' can 
only appear on the left hand side of += or -=

På vilket sätt är bäst att lösa mina problem?

268 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)