处理两个UserControl之间的ProcessCmdKey

时间:2012-12-31 12:52:53

标签: c# winforms visual-studio

我有两个UserControl,如下所示:

  1. CashDeposit
  2. GeneralAccount
  3. GeneralAccount UserControl已添加到cashdeposit UserControl中,并在表单加载时设置为不可见。通过按DataGridview特色文本列KeyUp事件中的 Ctrl + C 可以看到GeneralAccount。

    我对这两个控件之间的句柄 ProcessCmdKey EventHandller 感到困惑。 我的任务是按下Escape键,可见控件应该是不可见的。如果CashDeposit上显示的Generalaccount比Generalaccount仅在按Escape Key而不是CashDeposit时也是不可见的。如果GeneralAccount不可见并且用户按Escape键而不是CashDeposit Usercontrols应该是不可见的。 我正在尝试如下,但失败了。

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.Escape) 
            {
                if (genac.Visible==true )// Checking GeneralAccount Visible or Not
                {
                    genac.Visible = false;
                    dgv.Focus();
                }
                else 
                {
                    //Referenced Delegate to the Event for Closing or set visible true or  false 
                    //for CashDeposit UserControls From WinForm Application.
                    cashdepositkeydownevent cdkd = CashDepositKeyDownEvent;
                    if (cdkd != null)
                        cdkd(ref msg, keyData);
    
                }
    
            }
    
            return base.ProcessCmdKey(ref msg, keyData);
    
        }
    

    如果GeneralControls Visible并按Escape键,则上述工作正常。如果设置不可见,则在formLoad Eventhandller上显示visible = false,如果我按Escape而不是抛出错误

      

    “空引用异常未处理。,对象引用未设置”

    。在

    if (genac.Visible==true )// Checking GeneralAccount Visible or Not
    

    如何解决?

0 个答案:

没有答案