Kulcskódos a @ char

szavazat
1

tudna valaki kérem, mondja meg azonosítóját @ kulcs?

például keys.Escape van az ESC billentyűt. szeretnék tudni, mi az a @

köszönöm.

A kérdést 19/12/2009 19:40
a forrás felhasználó
Más nyelveken...                            


4 válasz

szavazat
2

Az én billentyűzet ez Keys.D2 mert @ ugyanaz kulcsot 2-es számjegy.

Azonban, ha kezelni KeyPress esetben kapsz KeyPressEventArgs az érv, amely KeyPressEventArgs.KeyChar tulajdonság . És ez a tulajdonság karakter helyett keycode.

Válaszolt 19/12/2009 19:47
a forrás felhasználó

szavazat
5

A kulcskódos , amit kapsz a KeyDown és KeyUp eseményeket. Mivel ez egy eltolt karakter, ez attól függ, hogy a billentyűzetkiosztást. Amennyire én tudom, a legtöbb billentyűzet van ez meghaladja a 2-es számjegy, és ez azt jelenti checcking számára e.Shift && e.KeyCode == Keys.D2(WinForms). De néhány legtöbb nemzetközi billentyűzetek, ez nem fog működni.

De megjegyezzük, hogy kezelje a KeyPress esemény sokkal megbízhatóbb:e.KeyChar == '@'

Edit: Vettem egy gyors pillantást ezen az oldalon , és a legtöbb nemzetközi billentyűzetek az "egész 2kulcsot és az Alt-valamit kap egy @.

Válaszolt 19/12/2009 20:16
a forrás felhasználó

szavazat
2

Nem szabad használni a KeyDown esemény felismerni gépelési gombok, mint a @. A fordítás virtuális kódot (KeyEventArgs.KeyData) a gépelési kulcs függ a billentyűzetkiosztást. Ami valószínűleg más, az Egyesült Királyságban az egy az USA-ban, van egy font szorítani valahol. És biztosan más a billentyűzet egy Távol-Keleten helyen.

A következő keyPressed esemény helyett.

Válaszolt 19/12/2009 20:16
a forrás felhasználó

szavazat
0

Először is kell egy osztályt, hogy lezárja az operációs rendszer kéri vizsgálatához szükséges, a billentyűzetkiosztás:

public class KeyboardPointer : IDisposable
{
  [DllImport("user32.dll", CharSet = CharSet.Unicode)]
  static extern short VkKeyScanEx(char ch, IntPtr dwhkl);
  [DllImport("user32.dll")]
  static extern bool UnloadKeyboardLayout(IntPtr hkl);
  [DllImport("user32.dll")]
  static extern IntPtr LoadKeyboardLayout(string pwszKLID, uint Flags);
  private readonly IntPtr pointer;
  public KeyboardPointer(int klid)
  {
    pointer = LoadKeyboardLayout(klid.ToString("X8"), 1);
  }
  public KeyboardPointer(CultureInfo culture)
    :this(culture.KeyboardLayoutId){}
  public void Dispose()
  {
    UnloadKeyboardLayout(pointer);
    GC.SuppressFinalize(this);
  }
  ~KeyboardPointer()
  {
    UnloadKeyboardLayout(pointer);
  }
  public bool GetKey(char character, out Keys key)
  {
    short keyNumber = VkKeyScanEx(character, pointer);
    if(keyNumber == -1)
    {
      key = Keys.None;
      return false;
    }
    key = (System.Windows.Forms.Keys)(((keyNumber & 0xFF00) << 8) | (keyNumber & 0xFF));
    return true;
  }
}

Akkor, ha fut:

Keys atKey;
bool hasAtKey;
using(var keyboard = new KeyboardPointer(CultureInfo.CurrentCulture))
  hasAtKey = keyboard.GetKey('@', out atKey);

hasAtKeylesz igaz, ha a billentyűzet egy billentyűkombinációt @, amely esetben atKeytart a megfelelő értéket, míg ellenkező esetben tart Keys.None.

Például, amikor elindul, akkor atKeyértékét tartalmazza Keys.Oemtilde | Keys.Shift, de ha változtatni a kódot átadni CultureInfo.GetCultureInfo("en-US")tartalmaz Keys.D2 | Keys.Shift.

Mint látható, KeyboardPointervan írva, hogy elfogadja mind a kultúra és a numerikus azonosító így nem korlátozódik az elsődleges billentyűzet kultúra, hanem más elrendezést használható vele, mint a Dvorak elrendezések stb

A fenti összes használó hívások a Windows' User32 funkciókat, így egy másik megközelítésre lesz szükség más platformokon.

Válaszolt 17/05/2015 11:34
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more