C#Windows窗体启动键盘
本文关键字:键盘 启动 窗体 C#Windows | 更新日期: 2023-09-27 18:12:26
每当用户在表单上的任何位置按下Escape键时,我都试图激发Cancel按钮事件。
我已经尝试了几种方法,但表单的Keypress事件不想触发
我的代码是:
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;
}
}
}
}
如果有人能帮助我,我将不胜感激
覆盖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);
}
this.CancelButton = btnCancel;
其中btnCancel是您的取消按钮。
设置Form.KeyPreview=true
并处理KeyDown
事件或设置CancelButton=ButtonID
。
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
设置为真正的
KeyPress事件在按下某些系统键时不会触发。改为使用KeyDown:
private void myControl_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
btnSave.PerformClick();
e.Handled = true;
}
}