C# Keydown 事件不起作用

C# Keydown event not working

我试图让应用程序在按下 ENTER 键后导航到 Web 浏览器组件中的某个 URL(条形码 reader 将数据输入条形码文本框并被编程为在每次扫描结束时添加 "ENTER")。然后条形码编号通过 URL 发送到服务器进行验证,结果显示在网络浏览器中。

最初阅读 Stack Overflow 后,我得出的结论是 this.KeyPreview 尚未设置 - 然而即使将其设置为 True 后它仍然不会。

我想要它做的就是当在 Form2 上的任何地方按下 ENTER 时,它应该将 WebBrowser 组件 URL 更改为 Barcode 文本框中包含的数据。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SUBWAY_deliverX_2017_POSlink
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
            this.ActiveControl = Barcode;
        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {

        }

        private void Barcode_TextChanged(object sender, EventArgs e)
        {

        }

        private void Barcode_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                webBrowser1.Navigate("https://10.0.0.142/deliverXPOSquery.php?barcode=" + Barcode.Text);
            }
        }
    }
}

以及 Designer 文件:

namespace SUBWAY_deliverX_2017_POSlink
{
    partial class Form2
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form2));
            this.button1 = new System.Windows.Forms.Button();
            this.Barcode = new System.Windows.Forms.TextBox();
            this.pictureBox1 = new System.Windows.Forms.PictureBox();
            this.webBrowser1 = new System.Windows.Forms.WebBrowser();
            this.button2 = new System.Windows.Forms.Button();
            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
            this.SuspendLayout();
            // 
            // button1
            // 
            this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.button1.Location = new System.Drawing.Point(177, 241);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(249, 79);
            this.button1.TabIndex = 0;
            this.button1.Text = "Return to SubShop";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // Barcode
            // 
            this.Barcode.BackColor = System.Drawing.SystemColors.Control;
            this.Barcode.BorderStyle = System.Windows.Forms.BorderStyle.None;
            this.Barcode.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.Barcode.Location = new System.Drawing.Point(178, 323);
            this.Barcode.Name = "Barcode";
            this.Barcode.Size = new System.Drawing.Size(249, 24);
            this.Barcode.TabIndex = 1;
            this.Barcode.TextChanged += new System.EventHandler(this.Barcode_TextChanged);
            // 
            // pictureBox1
            // 
            this.pictureBox1.Image = global::SUBWAY_deliverX_2017_POSlink.Properties.Resources.delxstoreheader;
            this.pictureBox1.Location = new System.Drawing.Point(0, -2);
            this.pictureBox1.Name = "pictureBox1";
            this.pictureBox1.Size = new System.Drawing.Size(589, 102);
            this.pictureBox1.TabIndex = 3;
            this.pictureBox1.TabStop = false;
            // 
            // webBrowser1
            // 
            this.webBrowser1.Location = new System.Drawing.Point(12, 106);
            this.webBrowser1.MinimumSize = new System.Drawing.Size(20, 20);
            this.webBrowser1.Name = "webBrowser1";
            this.webBrowser1.Size = new System.Drawing.Size(563, 120);
            this.webBrowser1.TabIndex = 4;
            this.webBrowser1.Url = new System.Uri("https://10.0.0.142/deliverXPOSquery.php", System.UriKind.Absolute);
            // 
            // button2
            // 
            this.button2.Location = new System.Drawing.Point(471, 256);
            this.button2.Name = "button2";
            this.button2.Size = new System.Drawing.Size(75, 23);
            this.button2.TabIndex = 5;
            this.button2.Text = "button2";
            this.button2.UseVisualStyleBackColor = true;
            this.button2.Click += new System.EventHandler(this.button2_Click);
            // 
            // Form2
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(587, 346);
            this.ControlBox = false;
            this.KeyPreview = true;
            this.Controls.Add(this.button2);
            this.Controls.Add(this.webBrowser1);
            this.Controls.Add(this.pictureBox1);
            this.Controls.Add(this.Barcode);
            this.Controls.Add(this.button1);
            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
            this.MaximumSize = new System.Drawing.Size(603, 385);
            this.MinimumSize = new System.Drawing.Size(603, 385);
            this.Name = "Form2";
            this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.Text = "deliverX 2017 - Order Validation";
            this.TopMost = true;
            this.Load += new System.EventHandler(this.Form2_Load);
            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.TextBox Barcode;
        private System.Windows.Forms.PictureBox pictureBox1;
        private System.Windows.Forms.WebBrowser webBrowser1;
        private System.Windows.Forms.Button button2;
    }
}

在您的代码中:

 this.Barcode.BackColor = System.Drawing.SystemColors.Control;
            this.Barcode.BorderStyle = System.Windows.Forms.BorderStyle.None;
            this.Barcode.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.Barcode.Location = new System.Drawing.Point(178, 323);
            this.Barcode.Name = "Barcode";
            this.Barcode.Size = new System.Drawing.Size(249, 24);
            this.Barcode.TabIndex = 1;
            this.Barcode.TextChanged += new System.EventHandler(this.Barcode_TextChanged);

您从未将 keydown 代码链接到您认为已经链接到的控件。所以不会。

就我个人而言,在我自己的条码读取应用程序中,我使用了更改后的文本并找到符合规范的条码,然后自动提交它。但我的是用于磁带扫描的,因此他们可以扫描 250 多个磁带并且不想每次都按一个按钮