c# - keys - शॉर्टकट मेनू




विंडोज फॉर्म एप्लिकेशन में कीबोर्ड शॉर्टकट को लागू करने का सबसे अच्छा तरीका? (8)

मैं सामान्य विंडोज कुंजीपटल शॉर्टकट को लागू करने का सबसे अच्छा तरीका ढूंढ रहा हूं (उदाहरण के लिए Ctrl + F , Ctrl + N ) मेरे विंडोज़ फॉर्म एप्लिकेशन में सी # में।

आवेदन का मुख्य रूप है जो कई बच्चे रूपों (एक समय में एक) होस्ट करता है। जब कोई उपयोगकर्ता Ctrl + F हिट करता है, तो मैं एक कस्टम खोज फ़ॉर्म दिखाना चाहता हूं। खोज फ़ॉर्म आवेदन में मौजूदा खुले बच्चे के फॉर्म पर निर्भर करेगा।

मैं ChildForm_KeyDown घटना में ऐसा कुछ करने का विचार कर रहा था:

   if (e.KeyCode == Keys.F && Control.ModifierKeys == Keys.Control)
        // Show search form

लेकिन यह काम नहीं करता है। जब आप कोई कुंजी दबाते हैं तो ईवेंट भी आग नहीं होता है। उपाय क्या है?


WinForm में, हम हमेशा नियंत्रण कुंजी स्थिति प्राप्त कर सकते हैं:

bool IsCtrlPressed = (Control.ModifierKeys & Keys.Control) != 0;

आप इस उदाहरण को भी आजमा सकते हैं:

public class MDIParent : System.Windows.Forms.Form
{
    public bool NextTab()
    {
         // some code
    }

    public bool PreviousTab()
    {
         // some code
    }

    protected override bool ProcessCmdKey(ref Message message, Keys keys)
    {
        switch (keys)
        {
            case Keys.Control | Keys.Tab:
              {
                NextTab();
                return true;
              }
            case Keys.Control | Keys.Shift | Keys.Tab:
              {
                PreviousTab();
                return true;
              }
        }
        return base.ProcessCmdKey(ref message, keys);
    }
}

public class mySecondForm : System.Windows.Forms.Form
{
    // some code...
}

आपके मुख्य रूप पर

  1. सही करने के लिए KeyPreview सेट करें
  2. निम्नलिखित कोड के साथ KeyDown ईवेंट हैंडलर जोड़ें

    private void MainForm_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control && e.KeyCode == Keys.N)
        {
            SearchForm searchForm = new SearchForm();
            searchForm.Show();
        }
    }
    

मुख्य फॉर्म से, आपको यह करना होगा:

  • सुनिश्चित करें कि आप KeyPreview को सत्य पर सेट करें (डिफ़ॉल्ट रूप से TRUE)
  • MainForm_KeyDown (..) जोड़ें - जिसके द्वारा आप यहां इच्छित शॉर्टकट सेट कर सकते हैं।

इसके अतिरिक्त, मैंने इसे Google पर पाया है और मैं इसे उन लोगों को साझा करना चाहता हूं जो अभी भी उत्तर खोज रहे हैं। (वैश्विक के लिए)

मुझे लगता है कि आपको user32.dll का उपयोग करना होगा

protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);

    if (m.Msg == 0x0312)
    {
        /* Note that the three lines below are not needed if you only want to register one hotkey.
         * The below lines are useful in case you want to register multiple keys, which you can use a switch with the id as argument, or if you want to know which key/modifier was pressed for some particular reason. */

        Keys key = (Keys)(((int)m.LParam >> 16) & 0xFFFF);                  // The key of the hotkey that was pressed.
        KeyModifier modifier = (KeyModifier)((int)m.LParam & 0xFFFF);       // The modifier of the hotkey that was pressed.
        int id = m.WParam.ToInt32();                                        // The id of the hotkey that was pressed.


        MessageBox.Show("Hotkey has been pressed!");
        // do something
    }
}

इसके अलावा इसे पढ़ें http://www.fluxbytes.com/csharp/how-to-register-a-global-hotkey-for-your-application-in-c/


यदि आपके पास मेनू है तो ToolStripMenuItem की ShortcutKeys संपत्ति को बदलना चाल करना चाहिए।

यदि नहीं, तो आप एक बना सकते हैं और इसकी visible संपत्ति को गलत पर सेट कर सकते हैं।


हंस का जवाब किसी नए व्यक्ति के लिए थोड़ा आसान बना दिया जा सकता है, इसलिए मेरा संस्करण यहां है।

आपको KeyPreview साथ KeyPreview बनाने की आवश्यकता नहीं है, इसे false सेट करें। नीचे दिए गए कोड का उपयोग करने के लिए, इसे अपने form1_load नीचे पेस्ट करें और इसे देखने के लिए F5 के साथ चलाएं:

protected override void OnKeyPress(KeyPressEventArgs ex)
{
    string xo = ex.KeyChar.ToString();

    if (xo == "q") //You pressed "q" key on the keyboard
    {
        Form2 f2 = new Form2();
        f2.Show();
    }
}

 private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if(e.Alt == true && e.KeyCode == Keys.A)
        {
            button1ADD.PerformClick();
        }

        if(e.Alt == true && e.KeyCode == Keys.D)
        {
            button2DeleteaaLL.PerformClick();
        }

        if(e.Alt == true && e.KeyCode == Keys.S)
        {
            Deleteselectedbtn.PerformClick();

        }

        if(e.Alt == true && e.KeyCode == Keys.C)
        {
            button4Close.PerformClick();
        }

    }

    private void Form1_Shown(object sender, EventArgs e)
    {
        txtInput.Focus();




    }

    private void button1ADD_Click(object sender, EventArgs e)
    {
        if(!string.IsNullOrEmpty(txtInput.Text))
        {
            Listmylist.Items.Add(txtInput.Text);
            txtInput.Clear();
            txtInput.Focus();
        }
    }


    private void button2DeleteaaLL_Click(object sender, EventArgs e)
    {
        Listmylist.Items.Clear();
        txtInput.Focus();
    }

    private void Deleteselectedbtn_Click(object sender, EventArgs e)
    {
        Listmylist.Items.RemoveAt(Listmylist.SelectedIndex);
        txtInput.Focus();

    }

    private void button4Close_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }

    private void txtInput_TextChanged(object sender, EventArgs e)
    {
        button1ADD.Enabled = true;

    }

private void buttonCheck_Click_1(object sender, EventArgs e)
    {
        bool jeElement = false;

        for (int i = 0; i < listBox1.Items.Count; i++)
        {
            if (textBox1.Text == listBox1.Items[i].ToString())
            {
                jeElement = true;
                break;
            }
        }
        if (jeElement)
        {
            label1.Text = "je element";
        }
        else
        {
            label1.Text = "ni element";
        }
        textBox1.ResetText();
        textBox1.Focus();

    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Alt == true && e.KeyCode == Keys.A)
        {
            buttonCheck.PerformClick();
        }
    }
}
}
    private void timer1_Tick(object sender, EventArgs e)
    {
        if (radioButtonF.Checked)
        {
            progressBar1.Value++;
        }
        else
        {
            progressBar1.Value--;
        }

        if (progressBar1.Value == progressBar1.Maximum)
        {
            timer1.Stop();
            label1.Text = "End";
        }

        if (progressBar1.Value == progressBar1.Minimum)
        {
            timer1.Stop();
            label1.Text = "Begining";
        }
    }

    private void radioButtonF_CheckedChanged(object sender, EventArgs e)
    {
        timer1.Start();
        progressBar1.Value = 0;
        progressBar1.Maximum = 100;
    }

    private void radioButtonB_CheckedChanged(object sender, EventArgs e)
    {
        timer1.Start();
        progressBar1.Value = 100;
        progressBar1.Minimum = 0;
    }
}
}

कृपया इस टिप्पणी को न हटाएं





keyboard-shortcuts