0

重複の可能性:
winforms にキーボード ショートカットを実装する最良の方法は?

KeyDown、KeyPress、または KeyUp に問題があります。private void Form1_KeyDown(object sender, KeyEventArgs e)このコードを挿入するフォーム ( ) の新しい KeyDown を作成します。

if (e.KeyCode == Keys.A && e.Modifiers == Keys.Control)
                MessageBox.Show("yes");

Ctrl + A を押すと、Yes メッセージの MessageBox が表示されます。

問題はこれです: 新しいプロジェクト ( Windows form application) を作成すると完全に動作しますが、Windows フォーム アプリケーション (4201 コード行のようなもの) にコードを追加すると動作せず、何が問題なのかわかりません。この場合、何が問題なのかわかりません。

ライブラリのせいかもしれません:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Web.Script.Serialization;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using System.Runtime.InteropServices;
using System.Media;
using System.Diagnostics;
using Microsoft.Win32;
using System.Net.Mail;
using System.Net;

または、私が Program.cs に追加したコードは、ユーザーがアプリを 1 回だけ起動できるようにします。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;

namespace Programari
{
    static class Program
    {
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        [return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)]
        static extern bool SetForegroundWindow(IntPtr hWnd);
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            bool createdNew = true;
            using (Mutex mutex = new Mutex(true, "MyApplicationName", out createdNew))
            {
                if (createdNew)
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new Form1());
                }
                else
                {
                    Process current = Process.GetCurrentProcess();

                    if(Settings1.Default.rosaueng == 0)
                        MessageBox.Show("smartAppointment este deja deschis, ii gasesti iconita in System Icons !","EROARE DESCHIDERE APLICATIE");
                    else
                        MessageBox.Show("smartAppointment is already open, you can find him at System Icons !", "ERROR OPEN APPLICATION");

                    foreach (Process process in Process.GetProcessesByName(current.ProcessName))
                    {
                        if (process.Id != current.Id)
                        {
                            SetForegroundWindow(process.MainWindowHandle);
                            break;
                        }
                    }
                }
            }
        }
    }
}

ご存知でしたら教えてください。ありがとう !

4

2 に答える 2

0

コードが上記のとおりである場合、問題は、ハンドラーEventArgsで、より具体的なの代わりにイベント引数を入力していることですKeyEventArgs。プロパティEventArgsがありません。KeyCode繰り返しになりますが、上に貼り付けたものが現在のものである場合、問題はコンパイルできない可能性があり、これが理由です。

アップデート

処理のための適切なメソッドシグネチャは次のようになりますKeyDown

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
  // Your code here
}
于 2012-09-05T18:50:19.117 に答える
0

Hans Passant が私に教えてくれた方法を試してみると、完璧に機能します。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == (Keys.Control | Keys.N))
            {
                //button5_Click(this, new EventArgs());
                MessageBox.Show("da");
                return true;
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }

しかし、Ctrl + Nを押してコードを押すと、button5を実行しようとしましたが、機能button5_Click(this, new EventArgs());しません。button5_Click 関数を呼び出すにはどうすればよいですか?

于 2012-09-05T19:03:00.667 に答える