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


Answers

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

  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();
        }
    }
    
Question

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

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

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

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

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




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

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...
}



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

आपको 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();
    }
}



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

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



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;
    }
}
}

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