কীভাবে ডাব্লুপিএফ-তে সংশোধনকারী কী রাজ্যগুলি সনাক্ত করা যায়?


151

কন্ট্রোল, শিফট, আল্ট বাটন ডাউন আছে কিনা তা অ্যাক্সেস করার দরকার হলে এমন কিছু গ্লোবাল কনস্ট্রাকশন রয়েছে যা আমি ব্যবহার করতে পারি? উদাহরণস্বরূপ একটি এর ভিতরে MouseDownঘটনা TreeView

যদি তাই হয়, কিভাবে?

উত্তর:


257

ক্লাস ব্যবহার করুন KeyboardKeyboard.IsKeyDownআপনি ব্যবহার করে নিয়ন্ত্রণ, শিফট, আল্ট এখন ডাউন আছে কিনা তা পরীক্ষা করতে পারেন check

শিফটের জন্য:

if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
{ /* Your code */ }

নিয়ন্ত্রণের জন্য:

if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{ /* Your code */ }

আল্টের জন্য:

if (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
{ /* Your code */ }

125

এছাড়াও আছে:

// Have to get this value before opening a dialog, or user will have released the control key
if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{

}

13
আরও ভাল সমাধান। এটি আপনাকে একবারে সমস্ত সংশোধক চেক করার অনুমতি দেয়। আপনি যদি Ctrl + F হ্যান্ডেল করতে চান তবে আপনি Ctrl + Shift + F হ্যান্ডেল করতে চাইবেন না, যাতে আপনি (e.Key == Key.F && e.KeyboardDevice.Modifiers == ModifierKeys.Control)অন্য সমস্ত জিনিসগুলির পরিবর্তে কেবল পরীক্ষা করতে পারেন ...
ygoe

35
নোট করুন যে উপরের উদাহরণগুলিতে তুলনাগুলি বিভিন্ন ফলাফল দেয়! ModifierKeys এনামের পতাকাগুলির বৈশিষ্ট্য হিসাবে আপনি এনামে মানগুলির কোনও সংমিশ্রণ রাখতে পারেন। আপনি যদি শিফট কী টিপে ধরতে চান তবে Keyboard.Modifiers == ModifierKeys.Shiftবিবৃতিটি ব্যবহার করুন । আপনি যদি শিফট কীটি ধরতে চান তবে একই সাথে অন্যান্য (Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shiftসংশোধকগুলি টিপলে যদি যত্ন না পান তবে হ্যাশফ্ল্যাগ সিনট্যাক্সটি ব্যবহার করুন বা আরও ভালKeyboard.Modifiers.HasFlag(ModifierKeys.Shift)
প্যাট্রিক বি

4
আমি এই পদ্ধতিটি ব্যবহার করে উইন্ডোজ কী সংশোধকটি ধরতে পারিনি। (সিটিআরএল ভাল কাজ করেছে।) আমি ধরার চেষ্টা করছিলাম WIN+RightArrow
এভিনিস

1
@ ইউনাইটস আকর্ষণীয়, এর Keyboard.Modifiersহিসাবে দেখায়None
চক সেভেজ

8
    private bool IsShiftKey { get; set; }

    private void OnPreviewKeyDown(object sender, KeyEventArgs e)
    {
        IsShiftKey = Keyboard.Modifiers == ModifierKeys.Shift ? true : false;

        if ((Key.Oem3 == e.Key || ((IsShiftKey && Key.Oem4 == e.Key) || (IsShiftKey && Key.Oem6 == e.Key) || (IsShiftKey && Key.Oem5 == e.Key)) && (validatorDefn as FormatValidatorDefinition).format == "packedascii"))
        {
           e.Handled = true;
        }
    }

2
উত্তরগুলি কমেন্টির পাশাপাশি কোডের সাথে আরও ভাল। দয়া করে কিছু প্রসঙ্গ সরবরাহ করুন।
ক্রিস

1
এটিকে স্বচ্ছলতা হিসাবে যুক্ত করার দুর্দান্ত ধারণা
রোলরোল

1
যখন আমি প্রিভিউকিজেডাউন ব্যবহার করতাম তখন আল্ট + অন্য কী কী সন্ধান করতে হয় আমাকে e.Key এর পরিবর্তে e.SismKey ব্যবহার করতে হয়েছিল (e.Key এর মান "সিস্টেম" ছিল Alt + অন্য চরিত্রটি ব্যবহারের ক্ষেত্রে, আমার ক্ষেত্রে)
জোশ

3

এইভাবেই আমি এটি পরিচালনা করি (প্রিভিউকিডাউন ব্যবহার করে), ধরা যাক আমরা Alt + R সন্ধান করছি ...

private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
    if ((Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt)
       && e.SystemKey == Key.R)
    {
       //do whatever
    }
}

হয়ত কেউ পরিষ্কার করতে পারে কেন আমাকে ই.সিস্টেমকি ব্যবহার করতে হয়েছিল এবং কেবল ই.কি না, সম্ভবত সংশোধকটির কারণে? পরিবর্তক + কী অনুসন্ধান করার সময় এটি আমার পক্ষে নির্দোষভাবে কাজ করেছে।


0

এবং পাশাপাশি:

যদি My.Computer.Keyboard.ShiftKeyDown তাহলে ...

My.Computer.Keyboard.CtrlKeyDown

My.Computer.Keyboard.AltKeyDown


0

আংশিকভাবে @ জোশের কাছ থেকে andণ নেওয়া, এবং কিছুটা ক্রুশিকের মতোই, এবং কী- এন্ট্রস.সিস্টেমকি এবং কীআভেন্টআরগস.কির মধ্যে পার্থক্য সম্পর্কে একটি প্রশ্ন উল্লেখ করা (কেন জোশকে সিস্টেমকে ব্যবহার করতে হবে তা উত্তর দেওয়া); পরিবর্তিত কী (যেমন অল্ট) সহ ই-কে কী.সিস্টেমটি দেয় এবং এভাবে 'আসল' কীটি ই.সিস্টেমকি-র মধ্যে রয়েছে।

এর চারপাশের উপায় হ'ল প্রথমে 'আসল' কীটি আনা, এবং তারপরে আপনার শর্তসাপেক্ষ:

private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
    // Fetch the real key.
    var key = e.Key == Key.System ? e.SystemKey : e.Key;

    if ((Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
        && key == Key.Return)
    {
        // Execute your code.
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.