2016-11-24 8 views
-1

포블이 있습니다. Enter 키를 누른 후 새 폼 (form2)을 열면 db에 뭔가를 추가 할 수 있습니다. Form2에있는 버튼 Ok입니다. Enter 키를 눌러이 버튼을 활성화하면 form2를 닫습니다.C# - KeyUp은 하나의 양식으로 만 가능합니다.

private void Form1_Load(object sender, EventArgs e) 
     { 
      this.KeyPreview = true; 
      this.KeyUp += new System.Windows.Forms.KeyEventHandler(KeyEvent); 
     }   
private void KeyEvent(object sender, KeyEventArgs e) 
     { 
      if (e.KeyCode == Keys.Enter) 
      { 
       dataGridViewSkladovePolozky.Focus(); 
       pridatDoKosiku(); 
      } 
     } 
private void buttonPridatDoKosiku_Click(object sender, EventArgs e) 
     { 
      pridatDoKosiku(); 
     } 
private void pridatDoKosiku() 
     { 
      PridatDoKosiku pridatDoKosiku = new PridatDoKosiku(); 
      pridatDoKosiku.ShowDialog(); 
      refreshNakupniKosik(true); 
      pridatDoKosiku.Dispose(); 
     } 
+0

이것은 'this.KeyPreview = true;'에 의해 발생합니다. form2가 열릴 때이 동작을 유지하려면'KeyEvent'에'if (form2.Visible) return; '을 추가하십시오. –

+0

KeyUp를 선호 할 특별한 이유가 없습니다. 아마도 KeyPreview의 어색한 동작을 해결하기 위해이 작업을 수행했을 것입니다. 어떤 레거시 VB6 속성 및 VB6 의미, 당신은 탐색 키에 대한 KeyDown 이벤트를 얻을 수 없습니다. Enter를 누르십시오. 대신 ProcessCmdKey()를 재정의하십시오. –

답변

0

이미 그것은 당신의 형태로 KeyPreview을 표시 한 이후 :

문제는 여기

은 예입니다 ..이 작용에 의해 내가 다른 시간이 Form1에의 keyup 호출 및 루프에서 임이다 모든 주요 이벤트를 캡처합니다. 깃발 &을 이와 같이 관리 할 수 ​​있습니다.

bool InFocus = false; 
    private void Form1_Load(object sender, EventArgs e) 
      { 
       this.KeyPreview = true; 
       this.KeyUp += new System.Windows.Forms.KeyEventHandler(KeyEvent); 
      }   
    private void KeyEvent(object sender, KeyEventArgs e) 
      { 
      if(InFocus) return; 
       if (e.KeyCode == Keys.Enter) 
       { 
        dataGridViewSkladovePolozky.Focus(); 
        pridatDoKosiku(); 
       } 
      } 
    private void buttonPridatDoKosiku_Click(object sender, EventArgs e) 
      { 
       pridatDoKosiku(); 
      } 
    private void pridatDoKosiku() 
      { 
       PridatDoKosiku pridatDoKosiku = new PridatDoKosiku(); 
InFocus = true; 
       pridatDoKosiku.ShowDialog(); 
       refreshNakupniKosik(true); 
       pridatDoKosiku.Dispose(); 
InFocus = false; 
      }