Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Windows窗体发射键_C#_Winforms_Windows Forms Designer - Fatal编程技术网

C#Windows窗体发射键

C#Windows窗体发射键,c#,winforms,windows-forms-designer,C#,Winforms,Windows Forms Designer,我试图在用户按下表单上任意位置的退出键时触发Cancel button事件 我尝试了几种方法,但是表单的按键事件不想触发 我的代码是: using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms

我试图在用户按下表单上任意位置的退出键时触发Cancel button事件

我尝试了几种方法,但是表单的按键事件不想触发

我的代码是:

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

namespace CLT
{
    public partial class UnallocatedReceipts : UserControl
    {
        #region Windows Forms Designer


        private void InitializeComponent()
        {
        }

        #endregion

        //Constructor that Initializes the Form
        public UnallocatedReceipts()
        {
            InitializeComponent();
        }

        BLLService ws = new BLLService();

        //Set the properties and Datasets used in the form
        DataSet banks = new DataSet();

        public String ClientName { get; set; }
        public Int32 CompanyCode { get; set; }
        public Int32 UserLevel { get; set; }
        public Int32 BranchCode { get; set; }
        public Int32 UserCode { get; set; }


        private void UnallocatedReceipts_Load(object sender, EventArgs e)
        {
            txtClientNumber.Focus();
        }


        //Populates the Client Info Grid
        private void PopulateGrid(Int32 clientNumber)
        {
            datPortfolio.DataSource = ws.PortfolioSearch(clientNumber.ToString(), CompanyCode, UserLevel, BranchCode).Tables[0];
        }

        //Gets the Client information and sets the Client Name Label to the selected client
        private void GetClientInfo()
        {
            DataRow dr = ws.GetClient(txtClientNumber.Text, 0, 9).Tables[0].Rows[0];
            lblClientName.Text = dr["g"].ToString() + " " + dr["f"].ToString();
            lblClientName.Visible = true;
            lblCltName.Visible = true;
        }

        /*Method that runs when the search button is clicked, method calls Validate Client Number that checks 
        if the Client Number that was entered is a valid number*/
        private void btnSearch_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;

            datPortfolio.DataSource = null;

            if (ValidClientNumber())
            {
                Cursor.Current = Cursors.WaitCursor;

                GetClientInfo();
                PopulateGrid(Convert.ToInt32(txtClientNumber.Text));
                //ClientExisting nc = new ClientExisting(ClientName, LoadClient, EnterFromBusiness);
                datPortfolio.Focus(); 
            }            
        }


        //Retrieves the Bank Name and Bank Code
        private void GetBanks()
        {
            banks = ws.QBankGroupsForBD();

            DataView dvBank = new DataView(banks.Tables[0]);
            cboBankAccount.DataSource = dvBank;
            cboBankAccount.ValueMember = banks.Tables[0].Columns[0].ColumnName;
            cboBankAccount.DisplayMember = banks.Tables[0].Columns[1].ColumnName;
            cboBankAccount.Enabled = true;
        }

        //Method to clear the form when Cancel button is clicked and also when Receipt has been inserted
        private void ClearForm()
        {
            txtClientNumber.Text = "";
            lblClientName.Visible = false;
            lblCltName.Visible = false;
            lblCltName.Text = "";
            datPortfolio.DataSource = null;
            txtAccountNumber.Text = "";
            txtAccountNumber.ReadOnly = true;
            dtpActionDate.Enabled = false;
            dtpActionDate.Value = DateTime.Today;
            txtDescription.Text = "";
            txtDescription.ReadOnly = true;
            txtAmount.Text = "";
            txtAmount.ReadOnly = true;
            cboBankAccount.DataSource = null;
            cboBankAccount.Enabled = false;
            ActionDate = DateTime.Today;
        }


        //Method that validates the entries that was made in the form when the save button is clicked
        private bool ValidateEntries()
        {
            decimal value;
            bool isDecimal = decimal.TryParse(txtAmount.Text, out value);

            if (ActionDate > DateTime.Today)
            {
                MessageBox.Show("Action Date must be today or in the past");
                dtpActionDate.Focus();
                return false;
            }
            else if(txtDescription.Text == "")
            {
                MessageBox.Show("Please complete the Description");
                txtDescription.Focus();
                return false;
            }
            else if (isDecimal == false)
            {
                MessageBox.Show("Please enter a valid decimal");
                txtAmount.Focus();
                return false;
            }
            else
            {
                return true;
            }
        }

        //Method that calls the store proc to insert the Receipts in the Database
        private void InsertUnAllocatedReceipts()
        {

            try
            {
                ws.InsertUnAllocatedReceipts(
                    int.Parse(txtClientNumber.Text),
                    int.Parse(txtAccountNumber.Text),
                    ActionDate,
                    txtDescription.Text,
                    decimal.Parse(txtAmount.Text),
                    Convert.ToInt32(UserCode),
                    int.Parse(cboBankAccount.SelectedValue.ToString())
                    );
            }
            catch (Exception ex)
            {
                 MessageBox.Show("Please contact your System Administrator!\n\nDetailed error follows: " + ex.ToString(), "Warning", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void datPortfolio_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter) //If enter is pressed
            {
                LoadReceiptInformation();
            }
        }

        //Loads the Receipt information that needs to be completed in order to save the receipt
        private void LoadReceiptInformation()
        {
            txtAccountNumber.Text = datPortfolio[datPortfolio.CurrentRowIndex, 2].ToString();
            dtpActionDate.Enabled = true;
            txtAmount.Enabled = true;
            txtDescription.Enabled = true;
            GetBanks();
            dtpActionDate.Focus();
        }

        private void datPortfolio_DoubleClick(object sender, EventArgs e)
        {
            LoadReceiptInformation();
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            ClearForm();
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            if (ValidateEntries())
            {
                InsertUnAllocatedReceipts();
                MessageBox.Show("Your Unallocated Receipt has been Inserted");
                ClearForm();
            }
        }

        //Fires the Search client click event that loads the datagrid when enter is pressed
        private void txtClientNumber_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnSearch.PerformClick();
                e.Handled = true;
            }
        }



        private void cboBankAccount_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                btnSave.PerformClick();
                e.Handled = true;
            }
        }


    }
}
如果有人能帮助我,我将不胜感激

this.CancelButton = btnCancel;
其中btnCancel是您的取消按钮

private void MyForm_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    if((Keys) e.KeyValue == Keys.Escape) 
        //this.Close(); or whatever your cancel action
}

然后将
KeyPreview
设置为true

设置
表单。KeyPreview=true
并处理
KeyDown
事件或设置
CancelButton=ButtonID
如果按某些系统键,不会触发按键事件。请改用KeyDown:

private void myControl_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Escape)
        {
            btnSave.PerformClick();
            e.Handled = true;
        }
    }

重写ProcessCmdKey以处理用户控件中的键事件:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    // 0x100 is WM_KEYDOWN
    if (msg.Msg == 0x100 && keyData == Keys.Escape)
    {
        //
        // call your cancel method here
        //

        // return true if you have handled the key press
        return true;
    }

    return base.ProcessCmdKey(ref msg, keyData);
}

这是一个用户控件,似乎没有“取消”按钮属性,该属性包含回复。这是一个用户控件,我无法设置KeyPreview属性,除非我缺少某些内容。由于某些原因,此事件不会触发。您是否在表单中将KeyPreview设置为true?我尝试设置它,但我在错误的位置或这是因为我收到一个错误,并且KeyPreview id无法识别。它是表单上的一个属性。。试试这个。KeyPreview=true;由于某些原因,这件事没有发生。我想我犯了一个错误。您应该处理控件的KeyDown事件,而不是cboBankAccount.private void UnallocatedReceipts_KeyDown(对象发送方,KeyEventArgs e){if(e.KeyCode==Keys.Escape){btnCancel.PerformClick();e.Handled=true;}}